三項演算子(?:)は if–else の短くて式として使えるバージョンです。式なので値として使え、代入や戻り値、他の式の中にそのまま書けます。けれど「短い=読みやすい」ではないので、使いどころを押さえるのが大事です。以下、初心者向けにわかりやすくまとめます。
1. 三項演算子の基本形
条件式 ? 式A : 式B
Java条件式がtrueのとき式Aの値が選ばれる。falseのとき式Bの値が選ばれる。
例:
int x = 10;
String result = (x % 2 == 0) ? "偶数" : "奇数";
System.out.println(result); // 出力: 偶数
Java2. どこで使えるか(よくあるパターン)
- 変数への代入:
int a = (b > 0) ? b : 0;
JavaSystem.out.printlnや return の中に直接:
System.out.println(score >= 60 ? "合格" : "不合格");
return (n == 0) ? "ゼロ" : "非ゼロ";
Java- 他の式の一部として(例:文字列結合など):
String msg = "結果: " + (passed ? "成功" : "失敗");
Java3. if–else と同じ処理(対応関係)
三項演算子:
String s = (x > 0) ? "positive" : "non-positive";
Javaif–else:
String s;
if (x > 0) {
s = "positive";
} else {
s = "non-positive";
}
Java4. ネスト(入れ子)した三項演算子
複数分岐を一行で書けます(右結合なので a ? b : c ? d : e は動く)が、読みづらくなるので注意。
例(点数→評価):
String grade = (score >= 90) ? "A"
: (score >= 70) ? "B"
: (score >= 50) ? "C"
: "D";
Java可読性を上げるために改行と括弧を入れると良いです。とはいえ、この程度なら if–else if–else の方が明快なことも多いです。
5. 注意点・落とし穴(初心者がハマりやすい)
- 式の型が一致する必要がある
式Aと式Bは互換な型でなければなりません(例えばintとStringを直接返すことはできません)。自動ボクシングでうまくいく場合もありますが、基本は同じ型を返すことを意識する。
// NG: 型が違うとコンパイルエラー(状況による)
Object o = (cond) ? 1 : "one";
Java- 読みやすさ
単純な二択なら OK。条件が複数段階になったり副作用がある式ではif–elseにする(将来の保守性のため)。 - 副作用のある式は避ける
三項演算子の中でメソッド呼び出しや代入を入れると見づらくなります。副作用はif–elseの方が追跡しやすい。 - 優先順位・結合規則
三項演算子は右結合(a ? b : c ? d : eはa ? b : (c ? d : e)と等価)。ネスト時は括弧で明示すると安全。 - 長い式はデバッグしにくい
ブレークポイントやログを入れたいときに困ります。
6. 実用例(いろいろ)
例1:最大値を一行で
int max = (a > b) ? a : b;
Java例2:null チェック(安全に値を取得)
String name = (user != null) ? user.getName() : "ゲスト";
Java例3:戻り値で三項演算子
public String status(boolean ok) {
return ok ? "OK" : "NG";
}
Java例4:複数条件(ネスト)
String grade = (score >= 90) ? "A" :
(score >= 70) ? "B" :
(score >= 50) ? "C" : "D";
Java→ 可読性を保つなら if–else if の方を推奨。
7. 実践的なルール(おすすめ)
- 単純な2択なら三項演算子で短く書く(代入や return、ログメッセージの作成など)。
- 三行以上の処理(条件ごとに複数ステートメントが必要)なら
if–elseを使う。 - ネストは避けるか、どうしても使うなら改行+括弧で読みやすく整形する。
- 型が明確でないときは
if–elseにして型ミスマッチのバグを防ぐ。 - デバッグやログ挿入が必要そうなら
if–elseにする。
8. 練習問題
- 変数
nが負なら-1、0 なら0、正なら1を返すメソッドを三項演算子だけで書け。 - 文字列
sがnullか空("")なら"空"、そうでなければsを返す式を書け。
解答例
1.
int sign(int n) {
return (n > 0) ? 1 : (n < 0) ? -1 : 0;
}
JavaString safe(String s) {
return (s == null || s.isEmpty()) ? "空" : s;
}
Javaまとめ(ワンポイント)
三項演算子は「短く書ける」「式として使える」強力な道具。ただし「読めるコード」を優先することが大切。単純なら三項演算子、複雑なら if–else と覚えておけばまず間違いありません。
