##1.理解しやすいコード
コードは理解しやすくなければいけない。
コードは他の人が最短時間で理解できるように書かなければいけない。
##2.名前に情報を詰め込む
名前は短いコメントだと思えばいい。
これは変数や関数、クラスなど名前をつけるときには同じ原則を当てはめることができる。
###明確な単語を選ぶ
「get」のような明確ではない言葉は避けた方がいいケースがある。
GetPage()というメソッドよりも、FetchPage()やDownloadPageの方が好ましい。
もっと適切な類義語があるか入念に調べよう。
###tmpやretvalなどの汎用的な名前は避ける
エンティティの値や目的を表した名前を選ぼう。
###抽象的な名前よりも具体的な名前を使う
ServerCanStart()よりもCanListenOnPort()の方が具体的だ。
これならメソッドの動作をそのまま表している。
###名前に情報を追加する
単位がメガバイトなら変数sizeよりもsize_mbの方が良い。
バグのような深刻な被害が出るところや、変数の意味を理解して貰わなければ困るところに
情報を追加しよう。
###名前の長さを決める
▪️ 頭文字と省略系
stringをstrに省略するのはOK。
BackEndManagerをBEManagerと省略するのはNG。初めて見た人は理解できないから。
▪️ 不要な単語は投げ捨てる
ConvertToString()を短くしてToString()にしても、必要な情報は何も損なわれない。
##3.誤解されない名前
名前が「他の意味と間違えられることはないだろうか?」と何度も自問自答する。
###例: filter()
filterは「選択する」のか「除去する」のか分からない。
select()かexclude()にした方が良い。
###上下の限界値を決めるときは、max_やmin_を前につけると良い。
ショッピングカートには10点までしか入らないとしよう。
この場合は、MAX_ITEMS_IN_CARTにするべきだ。
###包含的範囲を指定するときはfirstとlastを使う
###包含/排他的範囲であればbeginとendを使う
###ブール値の名前はisやhasなどの単語を使う
###名前を否定形するのは避ける
###getで始まるメソッドはメンバの値を返すだけに留めておく
##4.コードの美しさ
優れたコードは「目に優しい」ものでなければいけない。
一貫性と意味のあるやり方でコードを「整形」すれば、
すばやく簡単にコードを読むことができる。
###コードの列を整形する
###意味のある順番を選んで、常にその順番を守る
###空行を使って大きなブロックを論理的な「段落」に分ける
##5.コメントすべきことを知る
コメントの目的は、書き手の意図を読み手に知らせることである。
###コメントすべきでは「ない」こと
▪️ コードからすぐに分かることをコメントに書かない
▪️ ひどい名前はコメントをつけずに名前を変える
###記録すべき自分の考え
▪️ なぜコードが他のやり方ではなくこうなっているのか
▪️ 定数の値にまつわる「背景」
▪️ コードの欠陥をTODO: やXXX: などの記法を使って示す
(TODO: は「あとで手をつける」、XXX: は「危険!大きな問題がある」という意味)
###読み手の立場になって考える
▪️ コードを読んだ人が「えっ?」と思うところを予想してコメントをつける
▪️ 平均的な読み手が驚くような動作は文章化しておく
▪️ ファイルやクラスには「全体像」のコメントを書く
▪️ 読み手が細部にとらわれないように、コードブロックにコメントをつけて概要をまとめる
##6.コメントは正確で簡潔に
コメントは領域に対する情報の比率が高くなくてはいけない。
###複数のものを指す可能性がある「それ」や「これ」などの代名詞は避ける
###関数の動作はできるだけ正確に説明する
###コードの意図は、詳細レベルではなく、高レベルで記述する
##7.制御フローを読みやすくする
###比較を書くときには変化する値を左に、より安定した値を右に配置する
###三項演算子・do/whileループ・gotoは避ける
###ネストを浅くする
##8.巨大な式を分割する
###式を変数に代入する
▪️ 簡単な名前で式を説明することで、コードを文書化できる
▪️ コードの主要な「概念」を読み手が認識しやすくなる
###ド・モルガンの法則を使う
##9.変数と読みやすさ
プログラムの変数はすぐに増えるので、いずれ追跡できなくなる。
変数を減らして、できるだけ「軽量」にすれば、コードは読みやすくなる。
###邪悪な変数を削除する
結果をすぐに使って、「中間結果」の変数を削除する
###変数のスコープをできるだけ小さくする
変数を数行のコードからしか見えない位置に移動する
###一度だけ書き込む変数を使う
変数に一度だけ値を設定すれば、コードは理解しやすくなる
##10.無関係の下位問題を抽出する
###プロジェクト固有のコードから汎用コードを分離する
- 関数やコードブロックを見て「このコードの高レベルの目標は何か?」と自問自答する
- コードの各行に対して「高レベルの目標に直接的に効果があるのか?あるいは、無関係の下位問題を解決しているのか?」と自問する
- 無関係の下位問題を解決しているコードが相当量あれば、それらを抽出して別の関数にする
##11.一度に1つのことを
###コードは、1度に1つのタスクを行うようにしなければいけない
読みにくいコードがあれば、そこで行われているタスクをすべて列挙する。
別の関数やクラスに分割できるタスクがあれば、分割する。
##12.コードに思いを込める
ソースコードというのは、プログラムの動作を説明する最も大切な手段。
つまり、コードも「簡単な言葉で」書くべきなのだ。
###ロジックを明確に説明する
###ライブラリを知る
##13.短いコードを書く
最も読みやすいコードは、何も書かれていないコードだ。
###不必要な機能はプロダクトから削除する
###最も簡単に問題を解決できるような要求を考える
###定期的にすべてのAPIを読んで、標準ライブラリに親しんでおく
##14.テストと読みやすさ
他のプログラマが安心してテストの追加や変更ができるように、テストコードを読みやすくする。
###入出力のテストはコード1行で記述する
###テストが失敗したらバグの発見や修正がしやすいようなエラーメッセージを表示する
###テストに有効な最も単純な入力値を使う
###Test1()ではなく、Test_<関数名>_<状況>のような名前にする
##まとめ
読みやすいコードを書いて、自分が書いたコードを忘れてしまっても問題ないようにしよう。
読みやすいコードを書こう。忘れてもいいコードを書こう。