三項(条件)演算子 条件分岐3

三項演算子(条件演算子)

三項演算子とは、演算に三つの項目を用いる演算子です。
条件判定のために使われるので条件演算子とも呼ばれます。

これはサンプルコードを見たほうがわかりやすいです。

#include <stdio.h>

int main()
{
    int kazu1 = 5;
    int kazu2 = 7;

    //三項演算子
    int max = kazu1 > kazu2 ? kazu1 : kazu2;

    printf("%d", max);
    getchar();
}
7

9行目、変数maxの右辺(「=」の右側)が三項演算子を使った条件判定です。

式1 ? 式2 : 式3
式1が真の時に式2を、偽の時に式3を返す

三項演算子は「?」と「:」の記号の組み合わせです。
式1の条件を判定した結果、真の場合には式2の値が、偽の場合には式3の値が返ってきます。
全部で式が三つ必要なので、三項演算子と呼ばれます。

「kazu1 > kazu2」の比較が成立する時は変数kazu1の値が、成立しないときは変数kazu2の値が返ってきます。
そのため、変数maxには二つの変数のうち大きい方の値が代入されます。

上のサンプルコードをif文で書き換えると以下のようになります。

#include <stdio.h>

int main()
{
    int kazu1 = 5;
    int kazu2 = 7;
    int max;

    if(kazu1 > kazu2)
        max = kazu1;
    else
        max = kazu2;

    printf("%d", max);
    getchar();
}

特定の条件によって変数に代入する値を変えたい場合は三項演算子のほうが簡潔に書けます。

三項演算子の入れ子

三項演算子は入れ子にして使うことで、複雑な条件判定を行うこともできます。

#include <stdio.h>

int main()
{
    int kazu1 = 2;
    int kazu2 = 6;
    int kazu3 = -8;

    int max = kazu1 > kazu2 ?
        kazu1 > kazu3 ?
            kazu1 : kazu3 :
        kazu2 > kazu3 ?
            kazu2 : kazu3;

    printf("%d", max);
    getchar();
}
6

このコードは、それぞれの変数の中で一番大きな値が変数maxに代入されます。

ただ、このような三項演算子の入れ子はかえってコードの可読性(見やすさ)が低下するおそれがあります。
一行で済ますのではなく数行に分けるか、素直にif文を使ったほうが見やすくなることもあります。