設計を蝕む悪魔たち
9-1

デッドコードは消す

どんな条件でも実行されないコードは、読み手に「いつ動くのか」を無駄に考えさせ、何か意図があるのではと混乱させる。さらに怖いのは、仕様変更で周辺ロジックが変わった拍子に蘇ること。蘇ったコードは現行仕様と無関係なので、そのままバグになる。残しておくメリットはひとつもない。

請求書の延滞区分に残った旧仕様の分岐

Bad

冒頭で延滞日数を90日に丸めているため、「90日超」の旧区分には絶対に到達しない

到達不能な分岐が残ったまま
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 の静的解析で未到達コード・未使用関数を機械的に検出できる。見つけ次第すぐ削除する習慣にする。

参考: 『良いコード/悪いコードで学ぶ設計入門』(ミノ駆動 著、技術評論社)第9章。コード例は原則を自分の題材で表現し直したオリジナル。
9-1

デッドコードは消す

どんな条件でも実行されないコードは、読み手に「いつ動くのか」を無駄に考えさせ、何か意図があるのではと混乱させる。さらに怖いのは、仕様変更で周辺ロジックが変わった拍子に蘇ること。蘇ったコードは現行仕様と無関係なので、そのままバグになる。残しておくメリットはひとつもない。

請求書の延滞区分に残った旧仕様の分岐

Bad

冒頭で延滞日数を90日に丸めているため、「90日超」の旧区分には絶対に到達しない

到達不能な分岐が残ったまま
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 の静的解析で未到達コード・未使用関数を機械的に検出できる。見つけ次第すぐ削除する習慣にする。

参考: 『良いコード/悪いコードで学ぶ設計入門』(ミノ駆動 著、技術評論社)第9章。コード例は原則を自分の題材で表現し直したオリジナル。