Ruby三項演算子を使用すると、単純なif else構造の次のロジックを記述できます。
a = true ? 'a' : 'b' #=> "a"
しかし、これをif foo 'a' elsif bar 'b' else 'c'
?
次のように書くこともできますが、それに従うのは少し難しいです。
foo = true
a = foo ? 'a' : (bar ? 'b' : 'c') #=> "a"
foo = false
bar = true
a = foo ? 'a' : (bar ? 'b' : 'c') #=> "b"
そのようなシナリオを処理するためのより良いオプションはありますか、if..elsif..elseロジックを単一行に凝縮したい場合、これが最善の策ですか?
a = (foo && "a" or bar && "b" or "c")
または
a = ("a" if foo) || ("b" if bar) || "c"
Github Ruby Styleguide は、ささいなif/elseステートメント用に1つのライナーを予約し、ネストされた三項演算子を避けることを推奨しています。then
キーワードですが、それは悪い習慣と見なされます。
if foo then 'a' elsif bar then 'b' else 'c' end
制御ステートメントが非常に複雑である場合は、ケース(Rubyのスイッチ演算子)を使用できます。
a = if foo then 'a' elsif bar then 'b' else 'c' end
また書くことができます:
x = if foo then 'a' elsif bar then 'b' else 'c' end
ただし、これはRubyの慣用的なフォーマットではありません。