基本理念
- 簡潔 ≠ 正義 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 を括り出す
- 一行にこだわらない
変数
- スコープを縮める (グローバル変数は危険)
- 変数定義は使う直前
- 定数(イミュータブル)をなるべく使う
コードの再構成
無関係の下位問題を抽出する
- 一つのブロックに本質的なものだけ書く
- 小機能を独立させると改善が楽