リーダブルコード(オライリー社)を読んで感銘を受けたので,メモを残します。みなさんもぜひ読んで良いコードを増やすましょうよろしくお願いします。
1. 名前に情報を詰め込む
名前をみただけで情報を読み取れるようにする。
- 明確な単語 ー 例)❌
Get
,✅Fetch
,Download
- 汎用的な名前ダメ ー 例)❌
tmp
,retval
など, - 具体的な名前で,詳細に説明 ー 例)❌
ServerStart()
✅ListenOnPort()
- 変数名に情報を追加する ー 変数名に単位
_ms
をつけるなど - スコープの大きな変数に長い名前 をつける
- 大文字やアンダースコアに意味を含める ー 例)クラスのメンバ変数にだけアンダースコアをつける
2. 誤解されない名前
- boolean 変数 には
is
,has
をつける - 否定形の変数名を避ける
get()
,size()
は軽量であることが一般に期待される(重い処理を行わない)
3. 美しさ
- シルエットを揃える ー 複数のコードブロックで同じことをしていたらね
- コードの列を揃える ー 概要を把握しやすくなる
- 規則性を持たせる ー ある場所で「A・B・C」と並んでいたら,他のところで「B・A・C」にしたりしない
- コード全体を分割 ー 空行を使って意味的な段落に分ける
4. コメントすべきこと
コメントすべきでないこと ー
- コードからすぐにわかること
- ひどいコードを補うコメントを書くのではなく,コードを修正する
記録すべき自分の考え ー
- なぜコードが他のやり方ではなく,こうなっているのか
- コードの欠陥を
TODO:
XXX:
FIXME:
などの記法で強調する - 定数の値にまつわる背景を
- 例)1epoch_limit = 100 # この上限値は速度と性能の面でバランスが良い
読み手の立場になって考える ー
💡コメントの目的は,コードの意図を読み手に理解してもらうこと
- 読んだ人が「?」となるところを予想してコメントする
- 平均的な読み手が驚く動作は文書化しておく
- ファイルやクラスには「全体像」のコメントを
- コードブロックの先頭には概要コメントをつける
5. コメントは正確で簡潔に
小さな領域に情報量の多いコメントを書くことが肝要。
- ❌「それ」「これ」
- 関数の動作は正確に記述
- コメントに含める入出力の実例を吟味する
- コードの意図は高レベルで記述
- よくわからない引数にはインラインコメントをつける
- パターンやイディオムについての 情報量の多い単語 を使う(例:ヒューリスティック,総当たり,キャッシュ など)
6. 制御フローを読みやすくする
- 条件分岐では,変化する値を左辺 にする1if (100 > count) # ❌2if (count < 100): # ✅
- if/else のブロックの並び替え。肯定形・単純・目立つ物 を先に する
- 三項演算子は読みやすくなる場合にだけ使う
- ネストを深くしない。ガード節を使う。値を早めに返す。
7. 巨大な式を分割する
- 「説明変数」を追加1# わかりづらい2if line.split(':')[0] == 'root':3 ...処理...45# 分割するとわかりやすい↓6username = line.split(':')[0]7if username == 'root':8 ...処理...
- 論理式を変形 ー by applying ド・モルガンの法則
9. 変数と読みやすさ
プログラムの変数はすぐ増えて,いずれ追跡が困難になる。変数を減らして軽量にする。
- 邪魔な変数の削除 ー 結果をすぐ使って,中間変数を削除
- 変数のスコープを小さくする ー 変数を数行のコードからしか見えない位置に移動。使う場所の近くで宣言。
- 一度だけ書き込む変数を使う ー 変数を宣言した後で書き換えない。
const
,final
で宣言してイミュータブル(不変)にする。
10. 無関係の下位問題を抽出する
- 詳細すぎる下位問題を関数にまとめて分離 ー 読みやすく,かつ変更を加えやすくなる
- 汎用コードは積極的にユーティリティ化する
- メソッド内部の処理は同じ抽象度のレベルになるようにする
11. 一度に1つのことを
- コードを構成する際に,一度に複数のことをしない
- リファクタリングするときは,一度コード全体をタスクで分割する
12. コードに思いを込める
🥺 コーディングの理想的な手順
- コードの動作を簡単な言葉で同僚にもわかるように説明する
- その説明のなかで使っているキーワードやフレーズに注目する
- その説明に合わせてコードを書く
- ラバーダッキング ー プログラムのデバッグに悩んだときは,テディベアに問題を声に出して説明する
- 本質的なことはシンプルな言葉で説明できることが多い
“おばあちゃんがわかるように説明できなければ,理解しているとは言えない”
ー アインシュタイン
13. 短いコードを書く
- コードが増えるとテスト・保守・文書が増える
- 不必要なコードは消す
- 新しいコードを書かずに済む方法を身に着ける
- プログラミング言語の標準API,ライブラリを読む
- UNIX ツールボックスを使う