#以下のコード実行後の正しい表示結果を選べ。
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, 8]
#私の知っている三項演算子と様子が違う
頭の中にハテナが飛び散った。
つまづいた点として「条件式A ? 条件式B ? 式C : 式D : 式E」
の構造になっていたこと。
通常のチェリー本等で見ていた三項演算子はこうだった。
「条件式 A ? 式 B : 式 C」
この式は2重構造になっていた。
###結論から言うとこの式はこうゆうことだった。
if false || true #=>true
if true && false #=>false
a | b
else
a & b
end
b
end
①if false || true
#=>trueが返るので次のifに進む
②if true && false
#=>falseなのでelse
に進んで答えはa & b
=> [1, 3, 8]
ifで考えて展開したらわかりやすいなと思いました。
##初め取り組んでいたこと
c = (④false || true) ? (③true && false) ? (②a | b) : (①a & b) : b ;
演算子の優先順位に則って番号を振る。①〜④の順に評価されるはず!
①[1, 3, 8]
②[1, 2, 3, 5, 8, 6, 7]
③false
④true
ここで式がどうなっているかわからず詰まってしまっていた。
###【補足】
問題文の中で;(セミコロン)で終了の合図を出しているけど、
特になくても問題ない。