6-2
else を早期 return で消す
if-elif-else で結果を一時変数に詰めてから最後に return する書き方は、「この変数が途中で書き換わるかもしれない」という疑いを最後の行まで読者に持たせ続ける。条件が成立したらその場で return すれば else 自体が不要になり、各しきい値が独立した1行として並ぶ。
予算消化率からアラート区分を決める
✕ Bad
def budget_alert_level(used: Decimal, budget: Decimal) -> AlertLevel:
usage_rate = used / budget
level: AlertLevel
if usage_rate >= 1:
level = AlertLevel.OVERRUN
elif usage_rate >= Decimal("0.9"):
level = AlertLevel.WARNING
elif usage_rate >= Decimal("0.7"):
level = AlertLevel.CAUTION
else:
level = AlertLevel.NORMAL
return level✓ Good
def budget_alert_level(used: Decimal, budget: Decimal) -> AlertLevel:
usage_rate = used / budget
if usage_rate >= 1:
return AlertLevel.OVERRUN
if usage_rate >= Decimal("0.9"):
return AlertLevel.WARNING
if usage_rate >= Decimal("0.7"):
return AlertLevel.CAUTION
return AlertLevel.NORMALtopic 1 のガード節と同じ発想を「値を返す分岐」に適用した形。新しいしきい値(例: 80% で注意喚起メール)を足すときも差分は1行で済み、一時変数の初期化漏れや代入漏れという事故そのものが起きなくなる。