Edited at

ruby 三項演算子からの脱却 [そこは || でなんとかなるのでは?]

More than 5 years have passed since last update.


はじめに


  • これは個人的な話ですが、三項演算子を読むのが苦手です。

  • もちろん長くなる場合は、すぐに if 文を使用しますが、三項演算子で十分なときも多々あります。

  • しかし、もっと読みやすく書けるのではないか、と考えた結果、これだ!と思ったのでメモします。


  • 最初に断っておきますが、ベスト解ではないかもしれません。



そこは || 演算子でなんとかなるのでは?


  • 例として次のコードがあったとします。


sample.rb

def greet(args)

hoge = !args[:hi].nil? ? args[:hi] : "hoge"
fuga = !args[:hello].nil? ? args[:hello] : "fuga"
puts "Hi, #{hoge}"
puts "Hello, #{fuga}"
end

greet(:hi => "Ruby")
puts "--"
greet(:hello => "Scala")



出力

Hi, Ruby

Hello, fuga
--
Hi, hoge
Hello, Scala


  • greet というメソッドがあります。


  • 引数にハッシュを受け取り、:hi というキーに値が渡された場合は、その文字列を出力し、渡していなければ "hoge" という文字列を出力します。


    • :hello も同様



  • しかし、こう書けば読みやすいのではないか?と思ったのが以下です。



sample.rb

def greet(args)

hoge = args[:hi] || "hoge"
fuga = args[:hello] || "fuga"
puts "Hi, #{hoge}"
puts "Hello, #{fuga}"
end

greet(:hi => "Ruby")
puts "--"
greet(:hello => "Scala")



  • はい、 || 演算子です。

  • ruby では false と nil の時、"偽" つまり、条件が成立しません。

  • 引数で :hi のキーに値が渡された場合は、右辺の判定はせず、渡した文字列を出力し、渡していない場合は、"hoge" という文字列を出力します。


最後に


  • すっきりした気がします。どうでしょう?

  • "それは常識!"、"そこは、なんか違う!!"などの意見があれば、コメントください。