##そもそも三項演算子とは?
if文が複数行にわたるとき、一行でそれを記述できるのが三項演算子です。
条件式 A ? Aがtrueのときに出力する値: Aがfalseのときに出力する値;
が基本形です。実際に具体例を見ていきましょう。
a = 10
a > 10 ? 'hoge': 'fuga';
=> "fuga"
aには10が格納されます。これは10より大きくはないので、falseです。つまり、fugaが出力されます。
これをif文で書くとどうなるでしょうか?
a = 10
if a > 10
puts 'hoge'
else
puts 'fuga'
end
=> "fuga"
このように6行で書かれるものが、2行で書けるというのが三項演算子のスゴイところですね。
##三項演算子の条件に複数あった場合はどうすればよいのか?
以下のようなコードがあるんです。
a = 条件式1 ? 条件式2 ? "A" : "B" : "C";
このとき、以下の表にまとめたものが役に立ちます。
条件式1 | 条件式2 | 出力結果 |
---|---|---|
true | true | A |
true | false | B |
false | true | C |
false | false | C |
###選択肢➀
結論からいうと、エラーは発生しません。文法エラーやnomethoderrorは見つからないので、エラーは起きないです。
###選択肢➁
これが正解ですね。false||trueは成立しますので、1つ目の条件式はtrue。2つ目の条件式のtrue && falseは成立しないので、2つ目の条件式はfalseになります。上の表を参考にしてみると、出力結果は a & bになります。
その結果は[1, 3, 8]になります。
###選択肢➂
これは不正解ですね。これが正解になるには、2つの条件式がfalseになる必要があります。この選択肢を正解にするとなると、
a = [1, 2, 3, 5, 8]
b = [1, 3, 6, 7, 8]
c = false && true ? true && false ? a | b : a & b : b ;
p c
=> [1, 3, 6, 7, 8]
###選択肢➃
これは不正解です。この選択肢を正解にするには、
a = [1, 2, 3, 5, 8]
b = [1, 3, 6, 7, 8]
c = false || true ? true && false ? a & b : a | b : b ;
p c
=> [1, 2, 3, 5, 8, 6, 7]
##三項演算子の使い分け
このようにスッキリ書ける三項演算子ですが、使い時を弁えないと、可読性が落ちる書き方になります。
使い時に関しては、こちらの記事を参考にしてください
以上です。
何か間違いがございましたら、ご教示いただけますと幸いです。
【参考文献】