📖

【リーダブルコード】一度に一つだけ ― コードを「脱フラグメント」せよ

に公開

✅ 一度に複数のことをやるコードは読みにくい

「オブジェクトの初期化」「入力の解析」「ビジネスロジックの適用」「データの検証」など、ひとつのコードブロックに多くの処理を詰め込むと、読む人にとって非常に理解しづらいものになります。

著者はこれを「コードの断片化」と呼び、それを解消することを「脱フラグメント(defragmenting)」としています。


📘 読みやすいコードの基準とは?

コードが短ければ読みやすいというわけではありません。「一目で何をしているかわかること」が本質です。

そのためには、ひとつのコードブロックがひとつの目的だけを持つべきです。


🎯 小さな作業でも分けることで明確になる

例えば、コメントに「おすすめ」または「反対」を投票できるシステムがあるとします。得点は以下のように計算されます:

  • 「おすすめ」: +1点
  • 「反対」: -1点

✏️ 改善前のコード(Java風に書き換え)

public void voteChanged(String oldVote, String newVote) {
    int score = getScore();

    if (!newVote.equals(oldVote)) {
        if (newVote.equals("Up")) {
            score += oldVote.equals("Down") ? 2 : 1;
        } else if (newVote.equals("Down")) {
            score -= oldVote.equals("Up") ? 2 : 1;
        } else if (newVote.equals("")) {
            score += oldVote.equals("Up") ? -1 : 1;
        }
    }

    setScore(score);
}

このコードは動作しますが、何をしているのかを一目で理解するのが難しいです。


✅ 改善後のコード(小さな処理に分割)

public int voteValue(String vote) {
    if (vote.equals("Up")) {
        return 1;
    } else if (vote.equals("Down")) {
        return -1;
    }
    return 0;
}

public void voteChanged(String oldVote, String newVote) {
    int score = getScore();

    score -= voteValue(oldVote);
    score += voteValue(newVote);

    setScore(score);
}

改善後のコードでは、「投票値を整数に変換する処理」が voteValue() に切り出されています。これにより、各行の意味が明確になり、読む人の脳にかかる負担が大幅に軽減されました。


💡 コードを明確にするということは、将来的な保守性を高めること

たとえ今は動くコードでも、将来的に機能追加や仕様変更が入った場合、読みやすさが低ければバグが発生する可能性が高くなります。

「一度に一つだけ」という原則を守ることで、小さな作業を明確に記述でき、結果としてバグを防ぐことにつながります。


🧠 第11章から得た気づき

  • コードは短さよりも明確さが重要。
  • 1つのコードブロックに1つの目的だけを持たせる。
  • 開発者自身が「何を作るか」を明確にしてから書き始めることが大切。
  • コードを脱フラグメント(defragmenting)する意識を持つ。

私自身も時折、「何を作るのか」明確にしないまま、キーボードに手を伸ばすことがあります。しかしそれでは、コードが散らかり、後々読み返したときに苦労する羽目になります。

これからは「まず意図をはっきりさせる」「1つの目的に集中する」ことを意識しながらコーディングしていきたいと思います。

Discussion