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よりも効率的に処理できる可能性があります。