よい名前を付けましょう リーダブルなんたらとか

27
よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5 よい名前を付けまし ょう リーダブルなんたらとか よしだあつし(@yalab)

description

2012-09-12 に行われた Minami.rb の第14回勉強会の発表資料です

Transcript of よい名前を付けましょう リーダブルなんたらとか

Page 1: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

よい名前を付けましょう

リーダブルなんたらとか

よしだあつし(@yalab)

Page 2: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

自己紹介

Page 3: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

自己紹介

省略

Page 4: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

なぜ名前重要か?

Page 5: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

なぜ名前重要か?

http://jp.rubyist.net/magazine/?0001-Hotlinks

Page 6: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

リーダブルコード

Page 7: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

第2章 名前に情報を詰め込む

2.1 明確な単語を選ぶ✓

2.2 tmp や retval などの汎用的な名前を避ける

2.3 抽象的な名前よりも具体的な名前を使う

Page 8: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

第2章 名前に情報を詰め込む

2.4 名前に情報を追加する✓

2.5 名前の長さを決める✓

2.6 名前のフォーマットで情報を伝える

2.7 まとめ✓

Page 9: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

第3章 誤解されない名前

3.1 例: filter()✓

3.2 例: Clip(text, length)✓

3.3 限界値を含めるときは min と max を使う

3.4 範囲を指定するときは first と last を使う

Page 10: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

第3章 誤解されない名前

3.5 包含/排他的範囲にはbegin と end を使う

3.6 ブール値の名前✓

3.7 ユーザーの期待に合わせる✓

3.8 例: 複数の名前を検討する✓

3.9 まとめ✓

Page 11: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

注意

ここから先は必ずしも正しいものではありません。

こうやったほうがいいんじゃね?という僕からの提案だと考えてください。

Page 12: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

注意

いろいろ聞きますので答えてくれるとうれしいです。

rails の話だったりそうじゃなかったり様々です。

Page 13: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

getter と setter は無駄

class User{ function getAge(){ return $this->age; }

function setAge($age){ return $this->age = $age; }}

Page 14: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

getter と setter は無駄

class User attr_accessor :ageend

user = new User(name: 'yalab')user.age = 4

Page 15: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

 

getter だけとか setter だけならまだよいかも…

jQuery の引数付き呼び出しはsetter で引数なし呼び出しはgetter はわりとかっこいい

ruby にはそもそもattr_accessor なんかがあるのでそれを使おう

Page 16: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

具体的過ぎる名前は変数には向かない

//一週間立ったら削除する$sevenDaysAgo = 7 * 3600 * 24;

if($lastAccess + $sevenDaysAgo < time()){ ...}

Page 17: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

具体的過ぎる名前は変数には向かない

limit_date = 7 * 3600 * 24if last_access + limit_date < Time.now

end

Page 18: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

 

ハードコーディングは変更に弱い✓

さきほどの例だと $limitDate とか $expireDate?

Page 19: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

過程はさておき最終的に得られるものの名前にする

class User例えば誕生日から年齢を計算する場合

def calc_age end

よりは def age endend

Page 20: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

 

これは賛否両論✓

リーダブルコード的にはおそらくアウト

万葉の大場さん的には推奨✓

よしだも推奨✓

Page 21: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

中間テーブルのネーミングをさぼってはいけない

x users - users_groups - groupso users - memberships - groups

x people - people_items - itemso people - orders - items

Page 22: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

 

両方の名前でやると「中間テーブルである」ということはわかるけどそれしかわからない

適切な名前がついてると例えばコメントでそれが何であったかなどを残さなくてもよくなる

Page 23: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか 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

Page 24: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

 

プログラミングの対象はだいたい値なのでだいたい名詞

動詞を使う時はオブジェクトの内部の値を変える時

何かのトリガーになるものも動詞✓

動名詞は微妙✓

Page 25: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

クラス名とメソッド名での名前の重複を避ける

class Plan def monthly_plan endend

ではなく

class Plan def monthly endend

Page 26: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

閑話休題

Page 27: よい名前を付けましょう   リーダブルなんたらとか

よい名前を付けましょう - リーダブルなんたらとか Powered by Rabbit 2.0.5

ここからはゲームをしましょう

フレームインフレームアウト✓

OSSなコードのリファクタリング✓

何かしらを設計してみる✓

名前をつけてやる✓