0
1

More than 1 year has passed since last update.

三項演算子で条件式が複数あるとき

Posted at

そもそも三項演算子とは?

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

実際に問題を解いてみましょう

image.png

選択肢➀

結論からいうと、エラーは発生しません。文法エラーや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]

三項演算子の使い分け

このようにスッキリ書ける三項演算子ですが、使い時を弁えないと、可読性が落ちる書き方になります。
使い時に関しては、こちらの記事を参考にしてください

以上です。
何か間違いがございましたら、ご教示いただけますと幸いです。
【参考文献】

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