Tips

今日の開発Tips(2025-07-14)

本Tipsでは、開発における共通の課題である、大量の条件分岐を簡潔に記述する方法を紹介します。複雑なif-elseのネストを避けることで、コードの可読性を向上させ、保守性を高めることが可能です。辞書や、Python3.10以降で利用可能な構造化パターンマッチングを活用することで、エレガントで効率的なコードを作成できます。

条件分岐の簡略化

複雑な条件分岐は、コードの可読性を著しく低下させます。 多くの場合、辞書や構造化パターンマッチングを用いて簡潔に記述できます。

方法1:辞書による条件分岐

辞書をキーと値のペアとして利用し、条件をキー、実行内容を値として設定することで、if-elseのネストを避けることができます。

def process_data(data_type, data):
  handlers = {
      "typeA": lambda x: x * 2,
      "typeB": lambda x: x + 10,
      "typeC": lambda x: x / 2,
  }
  handler = handlers.get(data_type)
  if handler:
    return handler(data)
  else:
    return "Unknown data type"

print(process_data("typeA", 5))  # Output: 10
print(process_data("typeB", 5))  # Output: 15
print(process_data("typeC", 10)) # Output: 5
print(process_data("typeD", 5))  # Output: Unknown data type

方法2:構造化パターンマッチング(Python 3.10以降)

Python 3.10以降では、構造化パターンマッチングが導入されました。これにより、より複雑な条件分岐も簡潔に記述できます。

def process_data(data):
  match data:
    case {"type": "typeA", "value": value}:
      return value * 2
    case {"type": "typeB", "value": value}:
      return value + 10
    case {"type": "typeC", "value": value}:
      return value / 2
    case _:
      return "Unknown data type"

print(process_data({"type": "typeA", "value": 5}))  # Output: 10
print(process_data({"type": "typeB", "value": 5}))  # Output: 15
print(process_data({"type": "typeC", "value": 10})) # Output: 5
print(process_data({"type": "typeD", "value": 5}))  # Output: Unknown data type

注意点

  • 辞書を用いる方法は、条件の数が多い場合、辞書の管理が複雑になる可能性があります。
  • 構造化パターンマッチングはPython 3.10以降でしか利用できません。

おすすめポイント

  • 可読性の向上:複雑なif-elseのネストを回避することで、コードの可読性が向上します。
  • 保守性の向上:変更が必要になった場合でも、変更箇所が特定しやすくなります。
  • 効率性の向上:場合によっては、if-elseよりも効率的に処理できる可能性があります。