三項演算子とは
三項演算子または条件演算子とも呼ばれています。英語ではTernary operatorまたはConditional operatorと呼びます。
突き詰めると三項演算子はそんな簡単なものではなさそうですが、初心者としてはIf else文を1行で書ける
ショートカットとして使われるものと思えばよさそうです。
現場での三項演算子
if文と違って視認性が悪いと思っている方もいるそうで、現場によっては使わないよう指示されたりもするようです。
一方で、三項演算子のほうが使いやすいし、読みやすいと言う派閥もいて甲乙つけがたいようです。
先輩はよく使うと言っていたので覚えておいて損はなさそうです。
またif文との使い分けの判断が初心者には難しそうです。
三項演算子の構文
Javaでは唯一3つのオペランドが許されているそうです。
式
条件(boolean)式 ? 式 1 (true) : 式 2 (false) ;
最初の項目は条件式でboolean型 の真偽値(True or false)値を返します。
2番目と3番目はboolean値によってそれぞれ値を返します。
「式 1」はbooleanの結果がtrueだった場合に実行されます。
「式 2」true以外の時に実行されます。
言葉で説明してもよくわからないので、実際に数値で置き換えてみます。
例
int num = 8;
num = num >= 10 ? 5 : 0; // numが10以上なら5、それ以外は0
System.out.println(num); // 0
なじみがない身としてはちょっと混乱します。
if文と比較
f文ってどんなだったけ?と疑問になってしまったので上記式をif文で書いてみます。
int num = 8;
if(num >= 10){ // numが10以上なら5
num = 5;
}else{ //それ以外は0
num = 0;
}
System.out.println(num); // 0
三項演算子を書いたあとに書いてみると、長いなって感じはありますね。
複雑な三項演算子
三項演算子覚えられそうだなと思ったのもつかの間、調べていると出てくる2つ以上の三項演算子を組み合わせて書かれている難しい書き方。
なじむためにも複雑な三項演算子の例文を紹介します。
例
int num = 5;
num = ( num >=10) ? 100 : ( num >= 7 ) ? 50 : 0;
System.out.println(num); // 0
1行で書くと一瞬混乱してしまいますが、落ち着いて読んでみると理解できました。
言葉で書いてみると「num が10以上なら100 それ以外なら次の式、 numが7以上なら50 それ以外なら0」よってnum = 0 となります。
例
int num = 7;
System.out.println( (num == 5) ? ” num = 5 “: (num == 10) ? ” num = 10 “: “numは5でも10でもない”); // numは5でも10でもない
似たような文字が並んでいてややこしく見えますが、こちらも2回三項演算子が使われています。
言葉で書いてみると「num が 5 だったら num = 5 と表示、それ以外なら次の式、 numが10なら num = 10 と表示、それ以外ならnumは5でも10でもない と表示」よって numは5でも10でもない と表示されます。
クイズ
せっかくなのでクイズです。
問題:以下のIf else文の箇所を三項演算子で書いてみよう
int num = 3;
String msg = “”;
if(num > 5) {
msg = “true”;
}
else {
msg = “otherwise”;
}
System.out.println(msg);
答え
msg = num > 10 ? “true” : “otherwise”;
問題:AとBのうち大きい数値を三項演算子で求めよ。
int a = 5;
int b = 7;
int max;
//ここに三項演算子
System.out.println(max);
答え
max = a > b ? a : b ;
問題:三項演算子で絶対値を求めよ
※絶対値を正確には説明できませんが、ざっくり-10なら10、5なら5と非負の値です。
int num = -10;
//ここに三項演算子
System.out.println(num);
答え
num = ( 0 > num ) ? -num : num;
参考サイト:https://www.baeldung.com/java-ternary-operator