リーダブルコードまとめ
概要
全体的な内容を把握するために簡単にまとめました.詳細は書籍でご確認ください.
リーダブルコード
第一部 表面上の改善
1章 理解しやすいコード
コードは他の人が最短時間で理解できるように書かなければならない
行数を短くするよりも,他の人が理解するのにかかる時間を短くする
2章 名前に情報を詰め込む
- 明確な単語を選ぶ
- 汎用的な名前はつけない,変数の値表すような名前をつける
- 名前に情報を追加する
- 値に単位や属性をつける
- 名前の長さを決める
- プロジェクト固有の単語を省略形にしてはいけない
- 名前のフォーマットで情報を伝える
- フォーマット規約を整える(ローカル変数,メンバ変数など見分けられるようにするため)
3章 誤解されない名前
- 限界値を含めるときはmin,maxを使用する
- 範囲を指定するときは,firstとlastを使用する
- 包含/排他的範囲にはbegin, endを使用する
- 複数の名前を検討する
4章 美しさ
- 原則
- 読み手が慣れているパターンと一貫性のあるレイアウトを使用する
- 似ているコードは似ているように見せる
- 関連するコードはまとめてブロックにする
- 一貫性のある簡潔な改行位置
- メソッドを使った整列
- 縦の線を整列させる
- コードを段落に分割させる
- 似ている考えをグループにまとめる
5章 コメントすべきことを知る
- コードからすぐにわかることはコメントに書かない
- 自分の考えを記録する
- コードの欠陥にコメントをつける
- 定数に名前をつける(なぜその値で良いのかを説明する)
- 全体像のコメント
- 要約コメント
6章 コメントは正確に簡潔に
- コメントは領域に対する情報の比率が高くなければならない
- 指示語をやめて,正式な名称を記述する
- 入出力結果の実例を書く(関数などに)
- コードの意図を書く(処理全体の概要など)
第2部 ループとロジックの単純化
7章 制御フローを読みやすくする
- 条件式の引数の並び順は調査対象の式,比較対象の式の順にする
- (例) if (length >= 10)
- if/elseブロックの並び順
- 条件は否定形より肯定形を使用する
- 単純な条件を先に書く(複雑なものは条件化しにくい)
- 関心を引く条件や目立つ条件を先に書く
- do whileループを避ける
- goto文を使用しない
- ネストを浅くする
- コードを変更するときは,一歩下がって全体を俯瞰的に見て,読みにくくないか確認する
- 実行の流れを追いにくくなる構成要素の使用をコード全体の割合として大きくしないこと
- 構成要素
- スレッド:どのコードがいつ実行されるのかよくわからない
- シグナル:他のコードが実行される可能性がある
- 例外:いろんな関数呼び出しが終了しようとする
- 関数ポインタと無名関数:コンパイル時に判別できないので,どのコードが実行されるのかわからない
- 仮想メソッド:object.VirtualMethod()は未知のサブクラスのコードを呼び出す可能性がある
- 構成要素
8章 巨大な式を分割する
- 式を表す変数を用意する → 説明変数
- 大きなコードの塊を管理,把握を容易にするために要約変数を用いる
- 条件分にはド・モルガンの法則を使用する
9章 変数と読みやすさ
- 問題点
- 変数が多いと変数を追跡するのが難しくなる
- 変数のスコープが大きいとスコープを把握する時間が長くなる
- 変数が頻繁に変更されると現在の値を把握するのが難しくなる
- 余計な変数を削除する(一時変数など無くても困らない変数)
- 変数のスコープを縮める(グローバル変数などスコープが大きい変数は追跡が難しい)
- 変数は一度だけ書き込む(何度も変更すると値の追跡が難しくなる)
第3部 コードの再構成
プログラムの主目的と関係のない「無関係の下位問題」を抽出する
コードを再構成して,一度に1つのことをやるようにする
最初にコードを言葉で説明する.その説明を元にしてきれいな解決策を作る
10章 無関係の下位問題を抽出する
- 考え方
- 関数やコードブロックを見て「このコードの高レベルの目標は何か?」と自問する
- コードの各行に対して「高レベルの目標に直接的に効果があるのか? あるいは,無関係の下位問題を解決しているのか?」と自問する
- 無関係の下位問題を解決しているコードが早朝量あれば,それらを抽出して別の関数にする.(関数の中に関数化できそうなまとまった処理があれば,関数化する)
11章 一度に1つのこと
- 一度に一つのタスクを行う
12章 コードに思いを込める
- ロジックを明確に説明する
- ライブラリを知る
- 解決策を言葉で説明する
13章 短いコードを書く
- コードを小さく保
- 汎用的な「ユーティリティ」コードを作って,重複コードを削除する.
- 未使用のコードや無用の機能を削除する
- コードの「重量」を意識する.軽量で機敏にしておく.
- ライブラリについて知る(定期的にAPIを読んで,標準ライブラリについて頭の片隅においておく)