📖
【リーダブルコード】一度に一つだけ ― コードを「脱フラグメント」せよ
✅ 一度に複数のことをやるコードは読みにくい
「オブジェクトの初期化」「入力の解析」「ビジネスロジックの適用」「データの検証」など、ひとつのコードブロックに多くの処理を詰め込むと、読む人にとって非常に理解しづらいものになります。
著者はこれを「コードの断片化」と呼び、それを解消することを「脱フラグメント(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