導入
Java開発において、if-else文を簡潔に書き換えられる「三項演算子(条件演算子)」は非常に強力なツールです。適切に使用することでコードの行数を削減し、ロジックをスッキリと見せることができます。しかし、乱用すると逆に可読性を著しく下げる原因にもなります。本稿では、現場でスマートに使いこなすための勘所を解説します。
基礎知識
三項演算子とは、Javaにおいて唯一「3つのオペランド(被演算子)」を持つ演算子です。基本構文は「条件式 ? 式1 : 式2」となります。
・条件式がtrueなら「式1」が評価され、結果が返されます。
・条件式がfalseなら「式2」が評価され、結果が返されます。
いわば、if-else文を1行に凝縮したものですが、文(Statement)ではなく式(Expression)であるため、値を戻り値として直接変数に代入できる点が最大の特徴です。
実装/解決策
三項演算子を導入する際は、「代入する値の決定」に限定して使うのが最も安全です。if-elseで数行かけるような複雑な処理を無理に1行に詰め込むのではなく、あくまで「シンプルな値の切り替え」に留めることで、コードの意図が即座に伝わるようになります。
サンプルプログラム
以下のコードは、スコアに応じてメッセージを決定するシンプルな例です。
public class TernaryExample {
public static void main(String[] args) {
int score = 85;
// 三項演算子を使用して、スコアに基づき結果を決定
// if-else文よりも簡潔に記述できる
String result = (score >= 80) ? “合格” : “不合格”;
System.out.println(“判定結果: ” + result);
// 応用: 応用的なネスト(入れ子)は可読性が下がるため推奨しないが、
// 判定が単純な場合は一行で書くこともある
String rank = (score >= 90) ? “S” : (score >= 80) ? “A” : “B”;
System.out.println(“ランク: ” + rank);
}
}
応用・注意点
現場で最も注意すべきは「ネスト(入れ子)」です。三項演算子の中にさらに三項演算子を入れると、コードの構造が複雑になり、後から読み返すエンジニアを混乱させます。
また、以下の点にも注意してください。
1. 型の一貫性: 式1と式2の戻り値の型は、互換性がある必要があります。これらが異なるとコンパイルエラーや予期せぬ自動型変換が発生します。
2. 副作用の回避: 「式1」や「式2」の中にメソッド呼び出しやインクリメントなどの副作用がある処理を記述するのは避けてください。どちらの式が実行されるか直感的に分かりにくいため、デバッグが困難になります。
3. 条件の複雑化: 条件式が長くなりすぎる場合は、一時変数に格納するか、素直にif文を使う判断も重要です。「コードの短さ」よりも「読みやすさ」を優先するのが、シニアエンジニアの判断基準です。

コメント