『リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック』は、読みやすく、理解しやすいコードを書くための具体的な指針を示した書籍です。以下に、その主要なポイントをまとめます。
1. 名前に情報を詰め込む
変数をはじめとする名前は、その役割や内容を明確に伝えるべきです。
-
汎用的な単語ではなく、明確な単語を使う:
汎用的な単語 代替案の例 getfetch,download,retrievesizeheight,numNodes,memoryBytesstopkill,pause,haltsenddeliver,dispatch,announce,distribute,routefindsearch,extract,locate,recoverstartlaunch,create,begin,openmakecreate,setUp,build,generate,compose,add,new -
抽象的な名前ではなく、具体的な名前:
tmpは、生存期間が非常に短く、一時的な保管が最も重要な変数にのみ使用します。- イテレータ変数には、安易に
i,j,kを使うのではなく、club_idx,member_idx,user_idxのように、何を表すインデックスなのかがわかるように命名します。 - より直接的で、明確な表現にします。
// 悪い例 ServerCanStart // 良い例 CanListenOnPort
-
接尾辞や接頭辞で情報を追加する:
delay→delay_secs(単位)size→size_mb(単位)limit→max_kbp(限界値)angle→degree_cw(単位と方向)html→html_utf8(エンコーディング)
-
名前の長さを適切に決める:
- 長すぎる名前は短縮を検討します。
FormatString→FormatStrConvertToString→ToString
- 短すぎる名前は長くします。
- 長すぎる名前は短縮を検討します。
-
名前のフォーマットで情報を伝える:
- 大文字やアンダースコアなどの命名規則に意味を含ませる(例: 定数にはすべて大文字とアンダースコアを使用する)。
2. 誤解されない名前を使う
名前は、読み手が誤解しないように慎重に選びます。
-
多義語に気をつける:
filter→select(含める),exclude(除外する)clip→remove(削除する),truncate(切り詰める)
-
限界値を示す:
- 最大値には
maxやlimitを、最小値にはminを使う。 - 例:
max_users,min_length
- 最大値には
-
範囲を示す:
- 包含的な範囲には
firstとlastを使う。 - 排他的な範囲には
beginとendを使う。
- 包含的な範囲には
-
ブール値の変数名:
- ブール値の変数には、
is_,has_,can_,should_などの接頭辞をつけ、真偽が明確にわかるようにします。 - 例:
is_valid,has_permission,can_read,should_process
- ブール値の変数には、
-
ユーザーの期待に合わせる:
getメソッドは、通常、軽量で副作用のないアクセサ(ゲッター)であるという認識があります。計算コストが高い処理や副作用がある場合は、computeやcalculateなどの動詞を使います。sizeメソッドは、通常 $O(1)$ の計算量で返されると期待されます。計算量が多い場合は、countやcalculate_sizeなど、計算を伴うことを示唆する名前にします。
3. 美しさ(コードのフォーマットとレイアウト)
コードの見た目は、読みやすさに大きく影響します。
- 読み手が慣れているパターンと一貫性のあるレイアウトを使う:
- プロジェクトや言語のコーディング規約に従います。
- 似ているコードは似ているように見せる:
- 構造が似ているコードブロックは、同じようなフォーマットで記述します。
- 関連するコードはまとめてブロックにする:
- 論理的に関連する行は、空行などで区切ってグループ化します。
- 一貫性のある改行:
- 改行のルールを統一し、視覚的なノーズを減らします。
- 縦の線を揃える:
- 代入演算子や引数などを縦に揃えることで、コードの構造が把握しやすくなります。
details = request.POST.get('detail') location = request.POST.get('location') phone = request.POST.get('phone') - 意味のある並びにする:
- 変数宣言や関数呼び出しの引数などは、論理的な順序で並べます。
- 宣言をブロックにまとめる:
- 関連する変数宣言は、コードブロックの先頭など、一箇所にまとめます。
4. コメント
コメントは、コードだけでは伝わりにくい「なぜ(Why)」や「何が(What)」を補足するために書きます。
- コードからすぐにわかることをコメントに書かない:
- 例:
i = 0; // iを0に初期化のようなコメントは不要です。
- 例:
- 定数にコメントをつける:
- マジックナンバー(意味不明な数値)ではなく、名前付き定数を使用し、その定数の意味をコメントで補足します。
- 代名詞の使用を避ける:
- 「それ」「これ」のような代名詞は避け、具体的な名詞を使います。
- 関数の動作は正確に説明する:
- 関数の目的、引数、戻り値、副作用、例外などを簡潔かつ正確に記述します。
- よくわからない引数にはインラインコメント:
- 関数呼び出しの際に、引数の意味が分かりにくい場合は、その場でコメントを追加します。
参考文献
- Dustin Boswell, Trevor Foucher, 『リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック』, オライリージャパン (2012)