Javaの三項演算子(条件演算子)をご存じですか?
普段 if-else
文を使っているところをグッと短く書ける便利なテクニックですが、実は思わぬ使い道や落とし穴があるんです。今回は「三項演算子だけ」にフォーカスし、面白さ・実用性・トラップまで徹底的に解説します。
Javaの三項演算子とは?
三項演算子(条件演算子)は、以下のような構文を持つ演算子です。
(条件) ? 値1 : 値2
- 条件が
true
のときは 値1 - 条件が
false
のときは 値2
たとえば、x
が正かどうかを判定したい場合:
String result = (x > 0) ? "正" : "負または0";
if-else
文を1行にまとめられるので、可読性と記述量の両面で改善が見込めます。
ポイント ここが魅力!
- コード量を削減できる
- 変数に値を代入するとき便利
- return文とも相性が良い
しかし、いくら便利とはいえ、使いこなさないとトラブルを招くこともあります。
三項演算子の様々な使いどころ
複数条件を連続で判定したい場合、ネスト(三項演算子を入れ子にする)で書くこともできます。
String msg = (x > 0) ? "正" : ((x < 0) ? "負" : "0" );
正直、可読性はあまり高くありません。ただ、知っておくと既存コードを読むときに「ああ、こういう書き方をしているのか」と理解できるようになります。
次は引数を決定するちょっとした分岐に使う例です。
System.out.println( (isDebugMode) ? debugMessage() : normalMessage() );
isDebugMode
がtrue
ならdebugMessage()
の結果を表示false
ならnormalMessage()
の結果を表示
こんなふうに、値を一発で切り替えたい場面で威力を発揮します。
落とし穴と失敗談
「三項演算子を使ったけど、コンパイルエラーになる!」というときの典型例。
// ダメな例:条件以降が分かりづらい書き方 String msg = (x > 0) ? "正"; : "負"; // コンパイルエラー
;
を入れてしまうと、文法的にエラーになります。:
が正しい構文です。
続いて可読性が大幅ダウンする例。
String result = (user != null) ? (user.getAge() >= 20 ? "成人" : "未成年") : "ユーザー情報なし";

読めなくはないですが、理解するのに時間がかかります。可読性を優先したい場面では、if-else
に書き換えるか、ロジックを分割しましょう。
ポイント 三項演算子の使いどころ
- 短い分岐のみ三項演算子を使う
- 一目でわかる単純な条件式ならOK。複数条件が絡むなら
if-else
が無難。
- 一目でわかる単純な条件式ならOK。複数条件が絡むなら
- returnや代入時に限定して使う
- ただの分岐より「値を返す・値を代入する」ときが最も威力を発揮。
- 読みにくいと感じたら迷わず
if-else
- コードは自分だけでなく他の人も読むことを忘れずに。