リーダブルコード
理解のしやすいコード
コードは「理解するまでにかかる時間」が短いほうがいい
名前に情報を詰め込む
名前は短いコメントのようなもの
明確な単語を利用する
getなんか一番悪い例
例えばstop も動作に合わせてもっと明確な単語にいたほうがいい
重いなら kill
取り消しができるなら pause
もっと「カラフル」な単語を利用する
やりすぎるのも良くない
気取った言い回しじゃなく、明確で正確な単語を使う
汎用的な名前を避ける
tmp
生存時間が短い、一時的ぐらいに留める
i
イテレーションによく使われる
i , j, k... と派生していくよりも、使用するオブジェクトに合わせて名前を変えたほうがいい
user, member, clubs なら ui, mi, ci など
抽象的な名前より具体的な名前を使う
例: ServerCanStart() -> CanListionOnPort()
ローカル環境でロギングするためのオプションに --run_locally と名前をつけてしまう事例
別環境でロギングある状態でも locally となって不気味
有効になるのがロギングだけなのか不明瞭
もしローカル用のDB参照するなら別オプションに切り分ける
直交する概念はむりにまとめない
名前に情報を追加する
単位を追加する
start -> start_ms など
重要な情報を追加する
htmlをutf-8に変換した: html -> html_utf8
パスワードを保存する前には変換する必要がある:password -> plantext_password
名前の長さを決める
長すぎると読みづらいため
スコープの小さい変数は短くても構わない
上手に頭文字や省略を利用する
string -> str
documents -> doc
プロジェクト固有の略称は控える、新規メンバーがわからなくなるため
不要な単語は削る
名前のフォーマットで伝える
PAGE_MAX_SIZE みたいな大文字スネークケースなど定数として利用するなど
誤解されない名前
悪い事例:
filter() -> 除外しているのか、選択しているのかわからない
限界値に min,max を使う
カートに入る上限: MAX_ITEMS_IN_CART
範囲を指定する際には first, last を使う
包含/排他的範囲を指定する場合に begin, end を使う
end を指定したものは含まれないことに使われる
booleanについて
is, has, can, should がよく利用される
否定形はつかなわいほうがいい
長くもなるので
ユーザの期待に応える
get は軽量アクセサとして定着しているため、取得のための計算を行うべきではない
size
いろんなところで使われる、軽量のイメージがあるため、O(n) ぐらいにとどめる
最近のC++では O(1) が指定されている
複数の名前を検討し、誤解が生まれないようにする
美しさ
3つの原則がある
読み手が慣れているパターンと一貫性のあるパターンを使用する
似ているコードは似ているようにする
関連するところは一つのブロックにまとめる
一貫性のある改行位置
改行位置を意識して、見た目に一貫性を持たせる
メソッドを利用した整形
縦の線を揃える
,, =, {,の箇所を揃えて見やすくする
これは空白を作ったりなど、手間がかかるため、ここまですべきなのかはトレードオフな感じ
意味のある並びにする
アルファベット順、input formと同じ並びなど
宣言をブロックでまとめる
C++のヘッダーファイルの宣言など、論理的なグループに分けると見やすい
段落で分ける
メソッド内のロジックで、関連する処理をグループにまとめ、段落で分ける
読み手の踏み石になれる
書き方を一貫させる
{ の改行位置など
コメントするべきことを知る
コメントするべきではないこと
コードを見てわかるようなコメントはしない
コメントのためのコメントをしない
メソッド名をコメントで補足するぐらいならメソッド名変えろ
自分の考えをコメントする
コメンタリーを入れる
コードの背景、どうしてこんなにも処理が長くなったのか、今後どうしたいのかを知れる
定数にコメントを入れる
その定数となった背景を知ることができるため
読み手の立場になって考える
処理がぱっと見不明なところにコメントをつけるなど
ハマりそうな罠を告知する
処理が重いなど(計算量を提示してあげる)
全体像のコメント、要約されたコメント
ライターズブロックを乗り越える
「ライターズブロック」:行き詰って文章が書けないこと
コメントは簡素で完結に
代名詞を避ける
意図を書く場合は詳細ではなく、抽象よりにする
実例を使う
引数がややこしい場合は、名前付きのコメントをかいて上げる
情報密度の高い単語を使って簡潔に書く