1-2
ネストした条件分岐の迷宮
「条件を満たすときだけ処理を進める」つもりで if を重ねると、本来やりたい処理がネストの最深部に沈む。どこからどこまでが各 if のブロックなのか目で追うのが難しくなり、条件を1つ足すたびにさらに深くなる。分岐構造を正確に理解しないまま仕様変更すれば、そのままバグになる。
01 確定申告の電子申告を送信できるかの判定
✕ Bad
def submit_tax_return(self) -> None:
# 申告期間内か
if self.is_within_filing_period():
# 全帳票の検算が済んでいるか
if self.all_forms_validated:
# 電子証明書が有効か
if self.certificate.is_valid():
self.transmit()第1章ではまず「これが読みにくさとバグの温床になる」と知覚するところまで。条件を反転して先に抜ける早期 return による解消は、第6章のトピック1で扱う。
02 else がどの if と対なのか追えなくなる
✕ Bad
def build_filing_status(self) -> str:
if self.is_within_filing_period():
if self.all_forms_validated:
if self.certificate.is_valid():
status = "送信可能"
else:
status = "電子証明書の更新が必要"
else:
status = "検算未了の帳票あり"
else:
status = "申告期間外"
return status各ブロックの中身が数十行に育つと、対応する else は画面の遥か下に行ってしまう。この構造のまま条件を追加し続けたコードは実在し、読む者の時間と気力を奪う。