14
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

リーダブルコード規約(チートシート)

Last updated at Posted at 2020-09-03

自分で見返す用にまとめました。

印刷してラミネートして、いつでも参照できる状態にすると尚よしです。

リーダブルコードチェックリスト

1章 コードの可読性

  • コードは理解しやすくなければならない。(p2)
  • コードは他の人が最短期間で理解できるように書かなければならない。(p4)
  • コードは短くしたほうがいい。だけど「理解するまでにかかる時間」を短くするほうが大切(p4)

2章 基本的な命名規則

  • 明確で具体的で情報の備わった変数名を使用することで、変数名を読んだだけで中身がどんなものか把握できるようにする(原則)(p10,16,19)
  • tmp,retval,resultなどの汎用的で抽象的な変数は避ける(原則)(p12)
  • 変数名が長くても意味が伝わればいい、省略して解読に時間がかかるよりマシ(原則)(p23)
  • ただし、i j k などはループの変数として理解できるため使ってもよいこととする(例外)(p14)
  • stringをstr、documentをdocと省略するのは問題ないが、チーム独自の省略規則はやめよう(例外)(p15)
  • スコープが小さければ短い名前でもいい(例外)(p23)

// 明確で具体的で情報の備わった変数名〜
// 上から順に、明確な変数名、具体的な変数名、情報の備わった変数名

単語 代替案
send deliver,dispatch,announce,distribute,route
find search,etract,locate,recover
start launch,create,begin,open
make create,set up,build,generate,compose,add,new

server_can_star()よりもcan_listen_on_port()の方が明確で具体的

状況 変数名 改善後
passwordはプレインテキストなので、処理をする前に暗号化すべきである。 password plaintext_password
ユーザーが入力したcommentは 表示する前にエスケープする必要がある。 comment unescaped_comment
htmlの文字コードをUTF-8に変えた。 html html_utf8
入力されたdataをURLエンコードした。 data data_urlenc

3章 誤解されない名前

  • 名前が「他の意味と間違えられることはないだろうか?」と何度も自問自答する(p30)
  • 限界値を示す変数に min_ max_を使っているか。(p31)
  • 範囲を示す変数に first_ last_を使っているか。(p32)
  • 包括的範囲には begin_ end_ を使っているか。(p32)
  • getXXXXメソッドをアクセッサー以外で定義していないか。(p34)

4章 美しさ

  • インデントが整っており見やすいコードになっているか。(p50)
  • 正しさより一貫性。(p49,52)

5章 コメントのルール(What)

価値のあるコメント(自身の考え)

  • 定数にはコメントが書かれているか。THREAD_NUM = 8 だけだとデフォルトが8になった経緯が不明。(p62)
  • クラスの使用方法など高レベルのコメントが必要なファイルには、ファイルの先頭にコメントが書かれているか。(p66)
  • どのような経緯でコードが実装されたかを記載する(監督コメンタリー)(p60)
  • 時間やスキルの兼ね合いから発生するコードの欠陥にコメントをいれる(言い訳)(p61)
記法 典型的な意味
TODO: あとで手をつける
FIXME: 既知の不具合があるコード
HACK: あまり綺麗じゃない解決策
XXX: 危険!大きな問題がある

価値のあるコメント(理解の促進)

  • 第三者がコードを読んで疑問に思う点、間違って使う可能性を前もって想像し、コメントする(p63)
  • メソッドや処理の塊に対する要約コメント(p66)
  • 全体像に対するコメント(p66)

価値のないコメント

  • 処理の内容など、コードを読めば分かることをコメントしない(p57) //ここはコンストラクタ

6章 正確で簡潔なコードの書き方(How)

  • 情報密度の高い言葉を使う(専門用語、コンピュータ用語)(p78)
  • 入出力のコーナーケースには実例を使う(ただし実例は慎重に選ぶ)(p74)

7章 制御フローを読みやすくする

  • ヨーダ記法を使用していないか。(p85)
  • 三項演算子を使った結果、コードが理解しずらいものになっていないか。(p88)
  • do~whileループを使用していないか。(p89)
  • 関数内で早めに処理が抜けられるものはreturnで適切にガード節が作られているか。(p91)
  • ifのネストが深くなっていないか。(p93)

8章 巨大な式を分割する

  • 説明変数を使って改良できるコードが残っていないか。(p100)
  • 要約変数を使って改良できるコードが残っていないか。(p100)
  • 短絡評価を悪用、乱用していないか。(p102)

9章 変数と読みやすさ

  • ループ処理の中で不要な中間結果を保持する変数を使用していないか。
  • ループ処理の中で不要な制御変数を定義して使用していないか。
  • グローバルなスコープが必要ないグローバル変数を定義していないか。
  • クラス変数のスコープが必要ないクラス変数を定義していないか。
  • JavaScriptで変数がグローバル領域にはみ出していないか。
  • 古いC言語のルールに沿って意味もなく変数の定義を全て関数の先頭に書いていないか。
  • 変更の必要ない変数には積極的にfinalがついているか。(C++, java)

10章 無関係な下位問題を抽出する

  • メソッドの抽出が必要なコードは残っていないか。

11章 一度に一つのことを

  • ひとつのメソッド内に複数のタスクが書かれていないか。
  • メソッド名を逸脱した複数のタスクがひとつのメソッド内に書かれていないか。

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

なし

13章 短いコードを書く

  • 標準APIにある機能をオレオレ実装していないか。
  • 広く使われている外部ライブラリ(Apache CommonsやBoost)にあるような機能をオレオレ実装していないか。

14章 テストと読みやすさ

  • テストコードが理解しづらいものになっていないか。

15章

なし

14
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?