Ruby Style Guideを読んでの気づきリスト

はじめに

Ruby Style Guide読んだ。

普段、自分がrubyを使っている時には意識できていなかった点をピックアップしていきます。

case文にインデントはいらない

case
when song.name == "Misty"
  puts "Not again!"
when song.duration > 120
  puts "Too long!"
when Time.now.hour > 21
  puts "It's too late"
else
  song.play
end

stringの配列には%wを使おう(パーセント記法)

STATES = %w(draft open closed)

why???

[初心者向け] RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか

文字列だけの配列を作りたい場合は%w( )を使うと少し短く書けます。

Stringに関していろいろ

・文字列の場合は結合を使わない

email_with_name = "#{user.name} <#{user.email}>"

・<< のほうが速い

html = ""
html << "<h1>Page title</h1>"

コーディング規約をまとめてみた (Ruby編)

String#+ は非破壊的なメソッドであるため。String#+ は文字列結合するたびに新しい文字列を生成する。 そのため、String#<< のほうが速い。

Forはあんま使うな。each使おう

大抵の場合、forはeachで代替できる。

・for 式で使用する変数 (上の例でいう elem) が for 式の外からでも呼び出せてしまうため

・each メソッドで使用する変数はブロックスコープ内で宣言されるため、ブロックの内側からでしか呼び出せないため

if とか条件分岐周り

・thenは使わない

・if/then/else/end が1行で書けるような処理の場合は、代わりに三項演算子を使用する。 ※ただし、ネストしたり複雑なときはif/elseを使う(読みやすさが大事)

result = some_condition ? something : something_else

・and や or は使わない。&& や || を使おう

・unless と elseは併用しない(常にifとelseで書き換え可能なので)

・ifの条件を()で囲わない

block

・シングルラインだったら{}で囲い、マルチなら囲わない。

arr.each { |elem| puts elem }
names.select { |name| name.start_with?("S") }.map { |name| name.upcase }

式の定義

デフォルトの値を入れるときはスペースを入れる

# good
def some_method(arg1 = :default, arg2 = nil, arg3 = [])
  # do something...
end

クラス

・継承に関連して変わった挙動をすることがあるので、クラス変数@@は使わないこと。 (インスタンス変数はOK)

→継承先でもクラス変数の値が残るから。

・public、protectedやprivateは、メソッド定義と同じインデントの深さにすること。また、それぞれの上には空行を入れること。