Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Javaの3項演算子とは?

この記事では、Javaの3項演算子について解説します。

3項演算子とは、3つの変数に対して使うもので、if文をはじめとした条件分岐を省略するために使う演算子のことです。

ポテパンダの一言メモ

ちなみに、3項演算子以外にも「単項演算子」「2項演算子」があります。

単項演算子は、変数1つに対して使うものです。

例えば、数値型の変数を1つ増やす「++演算子」や、変数や条件式を true から false に、false から true に「!演算子」といったものがあります。

一方、2項演算子は、2つの変数に対して使うものです。

数値の計算でよく使う「+演算子」や「-演算子」などが当てはまります。

3項演算子の使い方

ではさっそく、3項演算子の使い方を見ていきましょう。

使うときは、次のように記述します。

条件式 ? 式1 : 式2;

「条件式」の部分に任意の条件を記述します。

そして「?」の後ろの「式1」に、trueの場合の式を、「式2」に、falseの場合の式を書く形です。

3項演算子は改行して記述も可能

3項演算子は、可読性を上げるために改行して記述してもOKです。

その場合は、次のように記述できます。

条件式
  ? 式1
  : 式2;

if文と3項演算子を比較

ここでは、3項演算子とif文の内容を比較しながら使ってみます。

記述例は次の通りです。

■記述例
public class Main {
  public static void main(String args[]){
    int i01 = 126, i02 = 100;
    String result;

    System.out.println("3項演算子の結果");
    result = (i01 > i02) ? "i01はi02よりも大きいです" : "i01はi02よりも小さいです";
    System.out.println(result);

    System.out.println("if文の結果");
    if(i01 > i02) {
      result = "i01はi02よりも大きいです";
    } else {
      result = "i01はi02よりも小さいです";
    }
    System.out.println(result);
  }
}

上記のプログラムは、int型の変数「i01」「i02」を比較し、結果によって表示する文字列を制御しています。

内容はまったく同じですが、3項演算子の方が記述量(行)が少なく、スッキリまとまっています。

実行結果は次の通りです。

■実行結果
mbp:Desktop potepan$ java Main
3項演算子の結果
i01はi02よりも大きいです
if文の結果
i01はi02よりも大きいです

どちらも、同じ表示結果になっているのがわかります。

また、先述した改行して書く方法は次の通りです。

■記述例
public class Main {
  public static void main(String args[]){
    int i01 = 126, i02 = 100;
    String result;

    result = (i01 > i02)
      ? "i01はi02よりも大きいです"
      : "i01はi02よりも小さいです";
    System.out.println(result);
  }
}

実行結果は、上記と同じになります。

3項演算子を複数の条件でネストして使う

3項演算子は、ネスト(入れ子)にして使うことも可能です。

ここでは、3項演算子で条件式を複数設定する方法を見ていきましょう。

記述方法は次の通りです。

条件式1 ? 条件式2 ? "出力結果1" : "出力結果2" : "出力結果3";

基本構文に、条件式と出力させる式を追加します。

少し複雑に感じるかもしれませんか、それぞれの条件式の結果による出力結果は、次の通りになります。

条件式1 条件式2 出力結果
true true 出力結果1
true false 出力結果2
false true 出力結果3
false false 出力結果3

では、実際にプログラムを動かして確認してみます。

■記述例
public class Main {
  public static void main(String args[]){
    int i01 = 126, i02 = 100, i03 = 200;
    String result;

    System.out.println("両方ともtrueの場合");
    result = (i01 > i02) ? (i02 < i03) ? "出力結果1" : "出力結果2" : "出力結果3";
    System.out.println(result);

    System.out.println("条件1がtrue、条件2がfalseの場合");
    result = (i01 > i02) ? (i02 > i03) ? "出力結果1" : "出力結果2" : "出力結果3";
    System.out.println(result);

    System.out.println("条件1がfalse、条件2がtrueの場合");
    result = (i01 < i02) ? (i02 < i03) ? "出力結果1" : "出力結果2" : "出力結果3";
    System.out.println(result);

    System.out.println("両方ともfalseの場合");
    result = (i01 < i02) ? (i02 > i03) ? "出力結果1" : "出力結果2" : "出力結果3";
    System.out.println(result);
  }
}
■実行結果
mbp:Desktop potepan$ java Main
両方ともtrueの場合
出力結果1
条件1がtrue、条件2がfalseの場合
出力結果2
条件1がfalse、条件2がtrueの場合
出力結果3
両方ともfalseの場合
出力結果3

出力結果は、どれも意図した通りになっているのがわかりますね。

3項演算子で何もしない・falseを省略する処理は入れられる?

例えば、falseの場合は何もしないといった動きはできるでしょうか?

結論を言うと、何かしらの値は入れる必要があります。代わりの方法として「空白」にするか「null」を返すことができるでしょう。

出力結果がString型の場合、返す値を空白にすることで、何もしない処理を実現可能です。

具体的には、次のように記述できます。

■記述例
public class Main {
  public static void main(String args[]){
    int i01 = 126, i02 = 100;
    String result;

    result = (i01 < i02) ?  "出力します" : "";
    System.out.println(result);
  }
}

実行結果は、空白で返ります。

また、String型でない場合などは「null」を返すことでも似たような処理になるでしょう。

nullは、変数の値に何も定義されていない(何も入っていない)状態を表す特殊な値です。

記述例は次のようになります。

■記述例
public class Main {
  public static void main(String args[]){
    int i01 = 126, i02 = 100;
    String result;

    result = (i01 < i02) ?  "出力します" : null;
    System.out.println(result);
  }
}

こちらは実行結果で「null」が返ります。

nullについて理解を深めたい場合は、以下の記事をチェックしてみてください。

【関連記事】
▶︎Javaでnullを正しく扱おう!新しいOptionalクラスも活用

まとめ

Javaの3項演算子について解説しました。

3項演算子は、記述量が減るというメリットがある一方で、処理がわかりにくくなり可読性が下がると感じる場合もあります。

特に、ネストして使う場合は、結果がどのように分岐するかわかりづらくなるでしょう。

そのため、3項演算子は使い所を見極め、必要に応じてif文を使うなど配慮が必要でしょう。

もし、3項演算子を使う場合は、ぜひこの記事を参考にしてくださいね。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。