9-1
デッドコードは消す
どんな条件でも実行されないコードは、読み手に「いつ動くのか」を無駄に考えさせ、何か意図があるのではと混乱させる。さらに怖いのは、仕様変更で周辺ロジックが変わった拍子に蘇ること。蘇ったコードは現行仕様と無関係なので、そのままバグになる。残しておくメリットはひとつもない。
請求書の延滞区分に残った旧仕様の分岐
✕ Bad
def classify_overdue(invoice: Invoice) -> str:
days = invoice.days_overdue
if days > 90:
days = 90 # 90日超はまとめて督促対象にする現行ルール
if days == 0:
return "current"
elif days <= 30:
return "warning"
elif days <= 90:
return "delinquent"
elif days <= 180:
# 旧運用の「超長期」区分。上の丸めにより永遠に実行されない
return "long_overdue"
return "unknown"✓ Good
def classify_overdue(invoice: Invoice) -> str:
days = min(invoice.days_overdue, 90)
if days == 0:
return "current"
if days <= 30:
return "warning"
return "delinquent"「いつか使うかも」と残す必要はない。履歴は git にすべて残っているので、消しても失うものはない。Python なら vulture や IDE の静的解析で未到達コード・未使用関数を機械的に検出できる。見つけ次第すぐ削除する習慣にする。