基本理念
- 簡潔 ≠ 正義 BUT 短い方がいい
- 他人・未来の自分が最短で理解できるように
表面上のTechs
命名
-
明確に
-
Not 汎用的 but 具体的
-
接頭辞・接尾辞を使う
-
長さを適切に
-
THE SAURUS (シソーラス)を使って探す
-
役割がないとき・生存期間が数行のときなどは
tmpなどを使っていい -
意味の異なるイテレータは
aiとbiなどに分けて使う -
識別子のスコープに応じて名前の長さを決定
-
省略はわかりやすい範囲で
-
不要な単語は捨てる
-
名前のフォーマット(
apple,Apple,APPLE)で情報を伝える(「大文字は定数」など) -
「クラスのメンバ変数なら
member_をつける」など、規約を作る -
HTMLの
classはハイフン、idはキャメル? -
filter()->select(),exclude() -
clip()->remove(),truncate() -
length->binaries,chars,words -
max,min-> -
範囲指定は
first-last -
排他的なら
begin-end -
真偽値なら
is,has,can,should -
想像できる命名
-
get= 軽い,compute= 重い
美しさ
- インデントを揃える(フォーマッターでおけ)
- 一貫した意味のある並び
- 重要度順
- アルファベット順
- 段落に分割して踏み石を提供
コメント
- コメントするべきでないこと = すぐわかること
- 優れたコード > ひどいコード + 優れたコメント
- 自分の考えを記録する
- 「〜した方がいいかも」
- アノテーション:
TODO,FIXME,HACK,XXX
- 読み手の立場で考える
- コードの意図を書く
- 全体像を簡潔に
- 名前付き引数 or インラインコメント
- 代名詞を避ける(
this,selfなど -> 具体的なuserなどにする) - 情報密度の高い言葉を使う
- 実例を書く
ループとロジックの単純化
制御フロー
- 条件式
- 調査対象 == 変化しない比較対象
- 肯定形
- 単純な条件が先
- 目立つ条件が先
- アーリーリターン
- ネストは浅く
巨大な式の分割
- 説明変数・要約変数
- ド・モルガンで NOT を括り出す
- 一行にこだわらない
変数
- スコープを縮める (グローバル変数は危険)
- 変数定義は使う直前
- 定数(イミュータブル)をなるべく使う
コードの再構成
無関係の下位問題を抽出する
- 一つのブロックに本質的なものだけ書く
- 小機能を独立させると改善が楽