LoginSignup
2
1

More than 1 year has passed since last update.

【Ruby silver】三項演算子が入れ子になっていて難しかった話(三項演算子、論理演算子、和集合、積集合を使ったコード)

Last updated at Posted at 2021-10-31

以下のコード実行後の正しい表示結果を選べ。

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
ここで式がどうなっているかわからず詰まってしまっていた。

【補足】

問題文の中で;(セミコロン)で終了の合図を出しているけど、
特になくても問題ない。

2
1
0

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
2
1