言語(Ruby)
- 「ture/false判定をするメソッドはメソッド名の最後に?をつける習慣がRubyにはある」
isXxx.rb
#### ture/false判定をするメソッドはメソッド名の最後に?をつける習慣がRubyにはある ####
# def isXxx()
# # 処理
# end
def isXxx?
# 処理
end
#### 呼出しも同じく ####
# if isXxx() ? true : false
if isXxx? ? true : false
Rubyってそんな定義できるんですね。
- 「Rubyはキャメルケースじゃなくてスネークケースね」
notation.rb
#### Rubyはキャメルケースじゃなくてスネークケースね ####
# isXxx()
is_xxx()
言われてみればRubyのメソッドってどれもこれもスネークケースな気がする。
ちなみに、Sublime Textでスネークケース⇔キャメルケースを相互変換するプラグインを教えていただいたので共有。
(https://github.com/jdc0589/CaseConversion)
フレームワーク(Rails)
- 「トップリダイレクトは'/'ではなくてroot_pathの方が変更に強くなる。topが必ず'/'とは限らないから」
redirect.rb
#### トップリダイレクトは'/'ではなくてroot_pathの方が変更に強くなる。 ####
#### topが必ず'/'とは限らないから ####
# redirect_to '/'
redirect_to root_path
完全に知識不足。Railsには色々用意されてるのね...
条件文
- 「returnする時は三項演算子は使わなくていいよ」
return.rb
#### returnする時は三項演算子は使わなくていいよ ####
# return result == 0 ? true : false
return result == 0
Java上がりなのもあって三項演算子で書きたくなるけど、これだとシンプルで◎
繰返し文
- 「rubyの配列操作はできるだけ標準装備のイテレータを使うように」
forFind.rb
#### rubyの配列操作はできるだけ標準装備のイテレータを使うように ####
# for str in list
# if str == "dummy" ? return str : next
# end
return list.find{|str|
str == "dummy"
}
Java上がりなのもあってfor~eachで回しちゃってたけど、Rubyだとfor~findで出来るらしい。
ちなみに、単純なfor~eachは以下の通り。
( @sakahukamaki さんからご指摘いただきました。 )
forEach.rb
list.each{|str|
# 処理
}
正規表現
- 「正規表現は%r{パターン}を使うとエスケープ処理不要となるっぽいね」
regexp.rb
#### 正規表現は%r{パターン}を使うとエスケープ処理不要となるっぽいね ####
# /http:\/\/xxxx\.com\// =~ str
%r{http://xxx.com/} =~ str
正規表現ってエスケープ文字が増えたり長くなればなるほど可読性下がるから、こういうの出来るの良い◎
その他当たり前な事
- 「こういうのを早期リターンと言って、こうすることでネストが深くなるのを防いで読みやすくできる」
reutrnEarly.rb
def hoge(param)
#### こういうのを早期リターンと言って、こうすることでネストが深くなるのを防いで読みやすくできる ####
# # 処理A()
# # 処理B()
# if param.blank?
# return
# end
return unless param.blank?
# 処理A()
# 処理B()
end
処理A→処理Bをした後にparamの判定をしてると、処理A→処理Bのコストが勿体ないので、先にparamの判定をしてしまおうというモノ。
これは単純なミス。
早期リターンは知ってたのに実装してしまってたという凡ミス。
- 「if文多いと読むのが面倒だから、こっちの方がシンプルだね」
simple.rb
#### if文多いと読むのが面倒だから、こっちの方がシンプルだね ####
if !request.referer ||
request.referer &&