リーダブルコードまとめ


リーダブルコードまとめ

概要

全体的な内容を把握するために簡単にまとめました.詳細は書籍でご確認ください.
リーダブルコード

第一部 表面上の改善

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を読んで,標準ライブラリについて頭の片隅においておく)