よい名前を付けましょう リーダブルなんたらとか
DESCRIPTION
2012-09-12 に行われた Minami.rb の第14回勉強会の発表資料ですTRANSCRIPT
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
よい名前を付けましょう
リーダブルなんたらとか
よしだあつし(@yalab)
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
自己紹介
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
自己紹介
省略
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
なぜ名前重要か?
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
なぜ名前重要か?
http://jp.rubyist.net/magazine/?0001-Hotlinks
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
リーダブルコード
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
第2章 名前に情報を詰め込む
2.1 明確な単語を選ぶ✓
2.2 tmp や retval などの汎用的な名前を避ける
✓
2.3 抽象的な名前よりも具体的な名前を使う
✓
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
第2章 名前に情報を詰め込む
2.4 名前に情報を追加する✓
2.5 名前の長さを決める✓
2.6 名前のフォーマットで情報を伝える
✓
2.7 まとめ✓
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
第3章 誤解されない名前
3.1 例: filter()✓
3.2 例: Clip(text, length)✓
3.3 限界値を含めるときは min と max を使う
✓
3.4 範囲を指定するときは first と last を使う
✓
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
第3章 誤解されない名前
3.5 包含/排他的範囲にはbegin と end を使う
✓
3.6 ブール値の名前✓
3.7 ユーザーの期待に合わせる✓
3.8 例: 複数の名前を検討する✓
3.9 まとめ✓
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
注意
ここから先は必ずしも正しいものではありません。
✓
こうやったほうがいいんじゃね?という僕からの提案だと考えてください。
✓
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
注意
いろいろ聞きますので答えてくれるとうれしいです。
✓
rails の話だったりそうじゃなかったり様々です。
✓
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
getter と setter は無駄
class User{ function getAge(){ return $this->age; }
function setAge($age){ return $this->age = $age; }}
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
getter と setter は無駄
class User attr_accessor :ageend
user = new User(name: 'yalab')user.age = 4
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
getter だけとか setter だけならまだよいかも…
✓
jQuery の引数付き呼び出しはsetter で引数なし呼び出しはgetter はわりとかっこいい
✓
ruby にはそもそもattr_accessor なんかがあるのでそれを使おう
✓
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
具体的過ぎる名前は変数には向かない
//一週間立ったら削除する$sevenDaysAgo = 7 * 3600 * 24;
if($lastAccess + $sevenDaysAgo < time()){ ...}
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
具体的過ぎる名前は変数には向かない
limit_date = 7 * 3600 * 24if last_access + limit_date < Time.now
end
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
ハードコーディングは変更に弱い✓
さきほどの例だと $limitDate とか $expireDate?
✓
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
過程はさておき最終的に得られるものの名前にする
class User例えば誕生日から年齢を計算する場合
def calc_age end
よりは def age endend
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
これは賛否両論✓
リーダブルコード的にはおそらくアウト
✓
万葉の大場さん的には推奨✓
よしだも推奨✓
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
中間テーブルのネーミングをさぼってはいけない
x users - users_groups - groupso users - memberships - groups
x people - people_items - itemso people - orders - items
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
両方の名前でやると「中間テーブルである」ということはわかるけどそれしかわからない
✓
適切な名前がついてると例えばコメントでそれが何であったかなどを残さなくてもよくなる
✓
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
class 名は名詞、メソッド名は動詞か名詞
class Order def items end def sum pluck(:price).inject(&:+) end
def calc_tax @tax = 10 * sum / 100 end
def total_all sum + @tax endend
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
プログラミングの対象はだいたい値なのでだいたい名詞
✓
動詞を使う時はオブジェクトの内部の値を変える時
✓
何かのトリガーになるものも動詞✓
動名詞は微妙✓
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
クラス名とメソッド名での名前の重複を避ける
class Plan def monthly_plan endend
ではなく
class Plan def monthly endend
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
閑話休題
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5
ここからはゲームをしましょう
フレームインフレームアウト✓
OSSなコードのリファクタリング✓
何かしらを設計してみる✓
名前をつけてやる✓