👋

【読書】理解しやすいコードとは?

2023/05/11に公開

「リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック」の内容のまとめです

1章 理解しやすいコード

「優れたコード」って何?

  • 他の人が見て最短時間で理解できるようなコード

コードは絶対短いほうが良い?

  • コードは短くした方がいい。だけど、「理解するまでにかかる時間」を短くする方が大切

2章 名前に情報を詰め込む

明確な単語を選ぶ

  • 類語辞典を使って調べ、その変数・関数名にあった明確な単語を選ぶべき
    (例)GetPage()ではなく、FetchPage()やDownloadPage()などより具体的な単語を使う
    (例)Size()ではなく、Height()・NumNodes()・MemoryBytes()など
    (例)Stop()という名前でも良いが、取り消しができない重い操作なら、Kill()・あとからResume()できるなら、Pause()にするなど

tmpやretval(戻り値)などの汎用的な名前を避ける

  • 変数にはエンティティの値や”目的”を表した名前を選ぼう
  • 「この変数には他に役割がない」という明確な意味があるならば、tmpという名前の変数名でも良い

イテレータが複数ある時はインデックス名に明確な名前を付けると良い

  • 「club_i・members_i・users_i」や「ci・mi・ui」など

抽象的な名前よりも具体的な名前を使う

  • ServerCanStart()という名前のメソッドよりもCanListenOnPort()という名前の関数の方がメソッドの動作をそのまま表している
    (任意のTCP/IPポートをサーバがリッスンできるかを確認するメソッド)

名前に情報を追加する

  • 値の単位を追加する
    例えば、変数名に_msを追加すれば、ミリ秒を表すことが明確になる
  • 変数の意味を間違えてしまったときにバグになりそうな場合にのみ重要な属性を追加する
    plaintext_password - 暗号化する前のパスワード
    unescaped_comment - エスケープする前のコメント
    html_utf8 - htmlの文字コードをUTF-8に変えた
    data_urlenc - 入力されたdataをURLエンコードした

スコープが小さければ短い名前でも良い

  • 見える範囲に必要な情報(変数の型・初期値)があるため
  • 逆にスコープが大きければ、具体的な長い名前を付ける

頭文字と省略形

  • 誰もが見てわかる省略形は使用しても良いが、プロジェクト固有の省略形はNG
    (○)evaluation(eval)・document(doc)・string(str)
    (×)BackEndManager(BEManager)

不要な単語を投げ捨てる

  • ConvertToString()を短くしてToString()にしても、必要な情報は何も損なわれていない

名前のフォーマットで情報を伝える

  • 大文字やアンダースコアなどに意味を含める
    例えば、クラスのメンバ変数にアンダースコアをつけて、ローカル変数と区別する

3章 誤解されない名前

~続く~

Discussion