条件演算子

条件に応じて値を決定する

if〜else文は最も汎用性の高い条件分岐の構文です。 しかしながら、わざわざif〜else文を使わなくてもよい場合もあります。

入力された2つの整数のうちの、大きい方を表示するプログラムを考えてみましょう。 まずは、if〜else文を使ったものです。

IfSample06.java
import java.io.*;

class IfSample06 {
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        
        System.out.println("一つ目の整数を入力してください。");
        int num1 = Integer.parseInt(br.readLine());
        
        System.out.println("二つ目の整数を入力してください。");
        int num2 = Integer.parseInt(br.readLine());
        
        int max;//大きい方の整数が入る。
        if(num1 > num2){
            max = num1;
        }else{
            max = num2;
        }
        
        System.out.println("大きいのは" + max + "の方です。");
    }
}

if〜else文の条件 num1 > num2 がtrueの場合は、maxにnum1を代入します。 そうでないときは、num2の方が大きいか、等しくなっていいますので、maxにnum2を代入します。 その結果、num1とnum2のどちらかが大きいときは大きい方が表示され、等しいときはnum2が表示されます。

IfSample06の実行結果 1
一つ目の整数を入力してください。
2
二つ目の整数を入力してください。
4
大きいのは4の方です。
IfSample06の実行結果 2
一つ目の整数を入力してください。
7
二つ目の整数を入力してください。
7
大きいのは7の方です。

IfSample06のif〜else文では、条件に応じて1つの変数maxの値を決めているだけです。 このような場合、条件演算子(conditional operator)の ?: を使って処理することもできます。 条件演算子を使った式は次のような構文になります。

構文 : 条件演算子
条件 ? 式1 : 式2

全体の式の値は、条件を評価した値がtrueの場合は式1を評価した値になり、falseの場合は、式2を評価した値になります。

条件演算子を使って、IfSample06を書き換えてみましょう。

OperatorSample11.java
import java.io.*;

class OperatorSample11 {
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        
        System.out.println("一つ目の整数を入力してください。");
        int num1 = Integer.parseInt(br.readLine());
        
        System.out.println("二つ目の整数を入力してください。");
        int num2 = Integer.parseInt(br.readLine());
        
        int max = num1 > num2 ? num1 : num2;
        
        System.out.println("大きいのは" + max + "の方です。");
    }
}

このプログラムの実行結果は、IfSample06の実行結果と同じになりますが、ずいぶんすっきりと書けているのがお分かりでしょう。if〜else文で書かれていた部分が、

        int max = num1 > num2 ? num1 : num2;

という1行に凝縮されてしまいました。 全体の式の値は、 num1 > num2 がtrueの場合は、 : の左のnum1になり、falseの場合は、 : の右のnum2になります。 こうして決まった全体の式の値が、maxに代入されるのです。

条件に応じて値を決定するだけなら、条件演算子 ?: を使って、簡潔に記述することができる。