三項演算子とは | 超初心者のJavaの勉強

三項演算子とは

三項演算子または条件演算子とも呼ばれています。英語では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

Java

Posted by Nakamoto