リーダブルコードの要約


はじめに

リーダブルコードの2章から6章までの要約を残しておきます。

 2章 変数・関数の命名の仕方

2章は理解しやすい変数・関数名を命名するためのメソッドが記されている
本書では、必要な情報を詰め込むことが命名の鍵であり、そのための6つのテーマが紹介されている

  1. 目的を表す明確な単語を選ぶ
    Ex) GetPage -> FetchPage/DownloadPage
  2. tmpやretvalなど情報のない名前は避ける
    「役割がない」という情報を伝えるためだったり、ループイテレータにおけるi,jなど以外の場面で、怠慢によって汎用的な名前を用いるのは避ける
  3. 抽象的な名前より動作を表す具体的な名前を使う
    Ex) ServerCanStart -> CanListenOnPort
  4. 接尾辞や接頭辞を使って情報を追加する
    単位やフォーマットを指定する
    Ex) id -> id_hex , start -> start_ms
    注意喚起など重要な属性を追加する
    Ex) password -> plaintext_password / ciphertext_password , html -> html_utf8
  5. 名前の長さを決める
    適した長さは、スコープの大小によって決める 理解できる範囲であれば、名前の一部を頭文字に置き換えたり、削除して良い
  6. 大文字、アンダースコアなどを使って情報を伝える

 3章 誤解されない名前の命名の仕方

3章は、名前から推測される動作が曖昧になるのを避けるためのメソッドが記されている
・曖昧な単語は使わない
Ex) filter -> select/exclude
・限界値を含めるときはmax,minを使う
Ex) limit -> max_/min_
・範囲がわかりやすい名前にする
Ex) 包含的ならfirst/last , 包含/排他的ならbegin/end
・ブール値にはそれがわかるようis,has,can,shouldなどを名前に入れる
・ブール値の名前は否定形にするのを避ける
Ex) disable_ssl -> use_ssl
・ユーザの期待する動作をさせる
軽量な動作を期待されるget,sizeには、重い動作をさせない

4章 美しいコードのレイアウト

4章では以下の3つの原則にそって読みやすいレイアウトにするメソッドが記されている
・読み手が慣れているパターンと一貫性を持たせる
 変数の定義の順をフォームのinputフィールドと一致させるなど
・似ているコードは似ているように見せる
 改行や空白、あるいはメソッドを使用してコードを整列させ、シルエットを似せる
・関連するコードはまとめてブロックにする
 宣言をまとめる、段落で分割し適宜コメントを追加するなど

5章 コメントの書き方

5章ではコメントすべきこととすべきでないことが記されている
コメントの目的は、読み手に意図を正確に理解してもらうことである

コメントすべきでないこと

 ・コードを読めばすぐにわかること
 ・ひどいコードを補うためのコメント(優れたコード>ひどいコード+優れたコメント)

コメントすべきこと

 ・最適化に関する情報や、コードの可読性に関する考え
 ・欠陥がある場合などの情報
「TO DO:」あとで手をつける、
「FIXME:」既知の不具合があるコード、
「HACK」あまり綺麗じゃない解決策、
「XXX]危険!大きな問題がある
 ・読み手が理解し難い部分の補足
 ・前もって予測できる誤った使用法をさせないための告知
 ・全体像や要約のコメント

6章 密度の高いコメントの仕方

6章ではどうすれば正確で簡潔なコメントができるのかが記されている
・「これ」や「それ」などの代名詞は名詞を代入して置き換える
・単純で短く直接的な文章をかく
Ex)これまでにクロールしたURLかどうかによって優先度を変える ー>
これまでにクロールしていないURLの優先度を高くする
・適切な、視覚化しやすく正確な実例をコメントする
Ex) 'src'の先頭や末尾にある'chars'を除去する ー>
Strip("abba/a/ba","ab")は”/a/” を返す
・作成意図と矛盾しないコードを記述するために、コードを書いていた時に考えていたことと近い、高レベルからの説明をコメントする
・引数にインラインコメントで名前をつける
Ex) Function(/* arg=*/ ...)
・簡潔にパターンやイディオムを表現する言葉で置き換える
Ex)「キャッシュ層」「正規化」

終わりに

プログラムの作者ではない人の視点を第一に考え、理解しやすい・簡潔なコードを心がけたいです