PR

【Java】三項演算子(条件演算子)を1分でわかりやすく

Java

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()
);
  • isDebugModetrue なら debugMessage() の結果を表示
  • false なら normalMessage() の結果を表示

こんなふうに、値を一発で切り替えたい場面で威力を発揮します。

落とし穴と失敗談

「三項演算子を使ったけど、コンパイルエラーになる!」というときの典型例。

// ダメな例:条件以降が分かりづらい書き方
String msg = (x > 0) ? "正"; : "負";  // コンパイルエラー

; を入れてしまうと、文法的にエラーになります。: が正しい構文です。

続いて可読性が大幅ダウンする例。

String result = (user != null) 
    ? (user.getAge() >= 20 ? "成人" : "未成年") 
    : "ユーザー情報なし";

読めなくはないですが、理解するのに時間がかかります。可読性を優先したい場面では、if-else に書き換えるか、ロジックを分割しましょう。

ポイント 三項演算子の使いどころ

  1. 短い分岐のみ三項演算子を使う
    • 一目でわかる単純な条件式ならOK。複数条件が絡むなら if-else が無難。
  2. returnや代入時に限定して使う
    • ただの分岐より「値を返す・値を代入する」ときが最も威力を発揮。
  3. 読みにくいと感じたら迷わず if-else
    • コードは自分だけでなく他の人も読むことを忘れずに。

以下のコードでコンソールに出力される文字列は何でしょう?

public class TernaryQuiz {
    public static void main(String[] args) {
        int score = 85;
        System.out.println(
            (score >= 90) ? "優" :
            (score >= 70) ? "良" :
            (score >= 50) ? "可" : "不可"
        );
    }
}
  • score が 85 のとき、最初の score >= 90 は false なので「優」は出力されない
  • 次の score >= 70 は true なので、"良" が出力される

結論として "良" が表示されます。

三項演算子はシンプルに使えばとても便利ですが、複雑になると一気に可読性が低下してしまう「諸刃の剣」です。

  • 短い分岐や一時的な値の選択に使う
  • 複雑になりそうなら素直に if-else

これを守っておけば、三項演算子を活かしたより読みやすいコードが書けるはずです。

タイトルとURLをコピーしました