Navigate back to the homepage

📚 要約:リーダブルコード(The Art of Readable Code)

Kenya Hondoh
April 20th, 2020 · 1 min read

リーダブルコード(オライリー社)を読んで感銘を受けたので,メモを残します。みなさんもぜひ読んで良いコードを増やすましょうよろしくお願いします。

1. 名前に情報を詰め込む

名前をみただけで情報を読み取れるようにする。

  • 明確な単語 ー 例)❌ Get ,✅ FetchDownload
  • 汎用的な名前ダメ ー 例)❌ tmp, retval など,
  • 具体的な名前で,詳細に説明 ー 例)❌ ServerStart()ListenOnPort()
  • 変数名に情報を追加する ー 変数名に単位 _ms をつけるなど
  • スコープの大きな変数に長い名前 をつける
  • 大文字やアンダースコアに意味を含める ー 例)クラスのメンバ変数にだけアンダースコアをつける

2. 誤解されない名前

  • boolean 変数 には is, has をつける
  • 否定形の変数名を避ける
  • get(), size() は軽量であることが一般に期待される(重い処理を行わない)

3. 美しさ

  • シルエットを揃える ー 複数のコードブロックで同じことをしていたらね
  • コードの列を揃える ー 概要を把握しやすくなる
  • 規則性を持たせる ー ある場所で「A・B・C」と並んでいたら,他のところで「B・A・C」にしたりしない
  • コード全体を分割 ー 空行を使って意味的な段落に分ける

4. コメントすべきこと

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

  • コードからすぐにわかること
  • ひどいコードを補うコメントを書くのではなく,コードを修正する

記録すべき自分の考え ー

  • なぜコードが他のやり方ではなく,こうなっているのか
  • コードの欠陥を TODO: XXX: FIXME: などの記法で強調する
  • 定数の値にまつわる背景を
  • 例)
    1epoch_limit = 100 # この上限値は速度と性能の面でバランスが良い

読み手の立場になって考える ー

💡コメントの目的は,コードの意図を読み手に理解してもらうこと

  • 読んだ人が「?」となるところを予想してコメントする
  • 平均的な読み手が驚く動作は文書化しておく
  • ファイルやクラスには「全体像」のコメントを
  • コードブロックの先頭には概要コメントをつける

5. コメントは正確で簡潔に

小さな領域に情報量の多いコメントを書くことが肝要。

  • ❌「それ」「これ」
  • 関数の動作は正確に記述
  • コメントに含める入出力の実例を吟味する
  • コードの意図は高レベルで記述
  • よくわからない引数にはインラインコメントをつける
  • パターンやイディオムについての 情報量の多い単語 を使う(例:ヒューリスティック,総当たり,キャッシュ など)

6. 制御フローを読みやすくする

  • 条件分岐では,変化する値を左辺 にする
    1if (100 > count) # ❌
    2if (count < 100): # ✅
  • if/else のブロックの並び替え。肯定形・単純・目立つ物 を先に する
  • 三項演算子は読みやすくなる場合にだけ使う
  • ネストを深くしない。ガード節を使う。値を早めに返す。

7. 巨大な式を分割する

  • 「説明変数」を追加
    1# わかりづらい
    2if line.split(':')[0] == 'root':
    3 ...処理...
    4
    5# 分割するとわかりやすい↓
    6username = line.split(':')[0]
    7if username == 'root':
    8 ...処理...
  • 論理式を変形 ー by applying ド・モルガンの法則

9. 変数と読みやすさ

プログラムの変数はすぐ増えて,いずれ追跡が困難になる。変数を減らして軽量にする。

  • 邪魔な変数の削除 ー 結果をすぐ使って,中間変数を削除
  • 変数のスコープを小さくする ー 変数を数行のコードからしか見えない位置に移動。使う場所の近くで宣言。
  • 一度だけ書き込む変数を使う ー 変数を宣言した後で書き換えない。const, final で宣言してイミュータブル(不変)にする。

10. 無関係の下位問題を抽出する

  • 詳細すぎる下位問題を関数にまとめて分離 ー 読みやすく,かつ変更を加えやすくなる
  • 汎用コードは積極的にユーティリティ化する
  • メソッド内部の処理は同じ抽象度のレベルになるようにする

11. 一度に1つのことを

  • コードを構成する際に,一度に複数のことをしない
  • リファクタリングするときは,一度コード全体をタスクで分割する

12. コードに思いを込める

🥺 コーディングの理想的な手順

  1. コードの動作を簡単な言葉で同僚にもわかるように説明する
  2. その説明のなかで使っているキーワードやフレーズに注目する
  3. その説明に合わせてコードを書く
  • ラバーダッキング ー プログラムのデバッグに悩んだときは,テディベアに問題を声に出して説明する
  • 本質的なことはシンプルな言葉で説明できることが多い

“おばあちゃんがわかるように説明できなければ,理解しているとは言えない”

ー アインシュタイン

13. 短いコードを書く

  • コードが増えるとテスト・保守・文書が増える
  • 不必要なコードは消す
  • 新しいコードを書かずに済む方法を身に着ける
    • プログラミング言語の標準API,ライブラリを読む
    • UNIX ツールボックスを使う

More articles from Kenya Hondoh

Azure の IaC 言語 Bicep とリソース設計のベストプラクティス

個人的ベストプラクティスを紹介

April 21st, 2023 · 1 min read

HHKB BLE MOD by yang

hhkb のコントローラを変えていく

June 6th, 2022 · 1 min read
© 2020–2023 Kenya Hondoh
Link to $https://twitter.com/EarllibraryLink to $https://github.com/kenchonLink to $https://www.linkedin.com/in/kenya-hondoh-2a7067123/