LoginSignup
2

More than 5 years have passed since last update.

【Ruby on Rails】「コードレビュー」してもらった。

Last updated at Posted at 2016-11-16

言語(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 && 

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2