LoginSignup
95
87

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-04-24

はじめに

  • これは個人的な話ですが、三項演算子を読むのが苦手です。
  • もちろん長くなる場合は、すぐに 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" という文字列を出力します。

最後に

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

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
95
87