リーダブルコード各章のまとめ
理解しやすいコード
もっと重要なポイントは、他の人が読んだとき最短時間で理解できるようにコードを書くこと
名前に情報を詰め込む
クラス名、定数、変数と自由に名前を決められるが、その名前に情報を詰め込むこと
- 明確な単語を選ぶこと
- tmpやreturnValueなどのあるあるな名前は避ける
- 具体的な名前を使う
- 変数名に単位など、大切な情報を追加する
- スコープが大きな変数には、長い名前をつける
- 大文字やアンダースコアなどに特別な意味を含める
誤解されない名前
ベストな変数名は、誰がみても誤解されない変数名。言い換えると記述者の意図を、名前から他の人が正しく理解できることが重要
例えば変数名をつけるときは必ず3つは考えるようにして、そのうちの一つを選ぶようにする
- 限界値を決めるときはmax_やmin_を使う
- 範囲の場合はfirstやlast、beginやend
- ブール値の場合はisやhas
- 変数名に否定語は避けると分かりやすくなる
- get()やsize()などは、軽量なメソッドが期待されるので、重い処理は書かないなど
美しさ
段落を適宜分けたり、意味のまとまりで分けたり、インデントを揃えたりして、コードを読みやすいものにすることが大切
- 複数のコードブロックで同じようなことをしていたら、インデントなどを使って全体のシルエットも同じようにする
- コードの列を整列すると、概要が把握しやすくなる
- ある場所でABCと並んでいたものを、他の場所でBACと並べないようにする。例えばアルファベット順、重要度順など、常にその順番を守る
- 空行を使って大きなブロックを論理的に意味のある、分かりやすい段落に分ける
コメントすべきことを知る
コメントの目的は、コードの意図を素早く読み手に理解してもらうためのもの
- コメントすべきでないこと
- コードからすぐに抽出できること
- よくないコードを補う補助的なコメント(この場合、よくないコードを修正した方が良い)
- コメントすべきこと
- なぜコードが他のやり方ではなくこうなっているかを記録する
- コードで気になるポイントをTODOやHACKなどを使って表す
- 定数を使用するときに、なぜその値にしたのかの背景やエピソード
- コードを読んだ人が、「え?」ってなりそうなところにコメントをつける
- 動作の流れが追いにくい部分は文書化してコメントする
コメントは正確で簡潔に
要するに、文字量はなるべく少なく、なるべくたくさんの情報を詰め込んだコメントがベスト
- 複数のものを示す可能性がある、それ、あれ、といった代名詞は使用しない
- 関数の動作は正確に説明する
- コメントに関数の入出力の実例を載せる。実例は分かりやすいものを選択する
- コードの意図は、詳細レベルではなく、概要レベルで記述する
- よくわからない引数には、インラインコメントを使う
- 多くの意味が詰め込まれた言葉や表現を使って、コメントを簡潔にする
制御フローを読みやすくする
例えばif文だったり、while文(for文)だったり、制御フローを読み手に対して分かりやすく書くのが大切
- 比較するときは変化する値を左に、固定された値は右に書く
- if/elseの条件分岐には、肯定系をなるべく使って、重要なものから先に処理する
- 三項演算子は使いすぎるとコードが読みにくくなるので注意
- ネストが深すぎると、読みにくくなるので、注意
- はやめにリターンできるものは早期リターンする。ガード節を使う。
巨大な式を分割する
たくさんの行数が書かれた関数は、理解するのが難しくなるが、説明用の変数を使ってあげることで、コードを理解しやすくなる
- 説明用の変数によるメリット
- たくさんの行数の式を分割できる
- 変数名を簡潔な名前にして、式の一つ一つを説明することでコードを文書化できる
- コードの主要な概念を読み手が認識しやすくなる
- ドモルガンの法則を使う
変数と読みやすさ
要するに変数は少ないに越したことはなく、できれば少なく済ませること
- 中間結果のみを表示している変数を削除する
- 変数のスコープをできるだけ小さくする。大きいスコープだと、追跡するのが大変
- constなどの変数宣言のように、変数を使うときには値を変更できないものを利用する
無関係の下位問題を抽出する
簡単に言うと、コードの中で関数に分けられるところは、分けましょうと言うこと。
分けることで、よりコードが本質的なものになる
- ヘルパー関数を作る。後から別のところでも汎用的に使える
- 関数に分ける
- ライブラリのメソッドを使う
一度に1つのことを
コードを書くときには、一度にひとつのタスクを処理するのを意識する。読みにくいコードは、複数のタスクを一度に処理しようとしていることが多い
- 読みにくいコードを修正する方法
- コードの中のタスクを列挙する
- タスクを一つ一つ処理するコードを書く
- タスクの処理を別のクラスや関数に分ける
コードに思いを込める
要するに、どんなコードをこれから書くのかを言葉で説明してから、実際にコードを書くと、理解しやすいコードを書けるというもの。結構馬鹿にできない
例えばプログラムを書くときには、先に日本語のコメントでどんな処理を書くのかを、記述してから、コードを書き始めるなど
- 問題や設計をうまく説明できるか言葉で説明してみる
- もしできないときは何かを見落としているか、詳細が明確になっていない
- プログラムを言葉で説明できるようになって初めて、明確なコードが書けるようになる
短いコードを書く
文章も一緒だが、短い文章の方が理解しやすい。同じようにコードも短い方が理解しやすい。究極はコードを書かなくて済ますのがベスト。
- コードを書くことで、技術的負債が増えることを理解しておく
- 不要な機能は削除する。過剰な機能は持たせない
- 定期的にライブラリや使用しているAPIに関するコードを読んで、内容を理解しておく