無理のあるelse句の省略はしない
1. 原則
無理のあるelse句の省略をしない
- 無理のあるelse句の省略とは、else句を省略したいが為だけに制御フローを不自然な形にする行為/コードである
- 例えば、以下のようなコードである
def example(obj1, obj2):
# 何かしらの処理...
obj1.set_value("xxx")
if obj2.value() == "example":
obj1.set_value("yyy")
# 何かしらの処理...
return obj1
- 例示である為、このコードの実用性については議論しない
- 注目すべきは
obj1.set_value("xxx")
を実行した後にobj2.value()
を評価し、その結果で改めてobj1.set_value("yyy")
していることである
- このコードを書いたプログラマの意図としては不要なelse句を省く為に敢えて複数回
obj1.set_value()
を呼ぶようにしたということである
- 結論から言うと、このようなコードはよろしくなく、このような無理のあるelse句の省略はするべきではない
2. 根拠
コードの意図が把握しにくくなる
- else句を省略したいモチベーションとしては、ガード節などでelse句を使わない形のif文を書くことが多いからだと思われる
- しかし、ガード節は早期returnと組み合わせたフィルタとしての意図を示す定型句としての側面が強い
- 一方、先述したコードは早期returnしていないし、するべきではない
- ifの条件にもelseの条件にもやるべき処理が存在するという点が重要である
- そのような場合は素直にif-elseを書くことでどちらの条件でも行われるべき処理があることを明示する方が意図が明快な良いコードになる
def example(obj1, obj2):
# 何かしらの処理...
if obj2.value() == "example":
obj1.set_value("yyy")
else:
obj1.set_value("xxx")
# 何かしらの処理...
return obj1
3. 指針
判定結果のいずれの場合でも処理が行われる場合は、else句を省略しない
- 既に述べたようにコードの意図が分かりにくくなる為、無理のあるelse句の省略はこれを避けるべきである
- 基準としてはif-elseのどちらでもなんらかの処理が行われる場合はelse句を省略するべきではない
- 例えば、三項演算子として表現できる処理フローはelse句を省略するべきではない
4 注意事項
参考資料