Ruby

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

More than 3 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" という文字列を出力します。

最後に

  • すっきりした気がします。どうでしょう?
  • "それは常識!"、"そこは、なんか違う!!"などの意見があれば、コメントください。