はじめに
-
これは個人的な話ですが、三項演算子を読むのが苦手です。
-
もちろん長くなる場合は、すぐに 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" という文字列を出力します。
最後に
- すっきりした気がします。どうでしょう?
- "それは常識!"、"そこは、なんか違う!!"などの意見があれば、コメントください。