6-1
早期returnでネスト解消
条件を満たす場合だけ処理を進めようとして if を重ねると、本来やりたい処理がネストの最深部に埋もれてしまう。「満たさないなら即 return」と条件を反転して並べれば、却下条件と本処理が分離されて読みやすくなる。
経費精算の承認判定
✕ Bad
def approve_expense(report: ExpenseReport | None) -> str:
result = ""
if report is not None:
if report.amount <= 50_000:
if report.has_receipt:
if report.applicant.is_active:
result = "approved"
else:
result = "rejected: applicant inactive"
else:
result = "rejected: no receipt"
else:
result = "rejected: over limit"
return result✓ Good
def approve_expense(report: ExpenseReport | None) -> str:
if report is None:
return "rejected: no report"
if report.amount > 50_000:
return "rejected: over limit"
if not report.has_receipt:
return "rejected: no receipt"
if not report.applicant.is_active:
return "rejected: applicant inactive"
return "approved"Python ではガード節(guard clause)として定着している書き方。却下条件の追加・削除が1行単位でできるので、承認ルールの仕様変更にも強い。