三項演算子

2016年11月10日演算子

スポンサーリンク

こんにちは。「Javaを復習する初心者」です。今回は三項演算子という演算子のひとつを扱いました。条件演算子とも言います。

今回は構文ではなくて演算子を復習しますが、内容は分岐処理です。三項演算子という演算子があるのですが、if(条件){変数1への代入処理;} else {変数1への代入処理;}という分岐処理を省略したような雰囲気です。if文とelse文の内容が1行で同じ変数へ代入している場合です。

スポンサーリンク

プログラム

以下にフローを書きます。

  1. boolean型変数flagを宣言し、trueで初期化する。
  2. String型変数sを宣言し、nullで初期化する。
    1. flagがtrueの場合、sに”こんにちは。”を格納する。
    2. flagがfalseの場合、sに”さようなら。”を格納する。
  3. sをprintlnで出力する。

上記内容を見るとif elseの構文で書けますが、三項演算子を使うこともできます。

以下はソースと実行結果です。

package test;


public class HelloConditionalOperator {

    public static void main(String[] args) {

        boolean flag = true;
        String s = null;

        s = flag ? "こんにちは。" : "さようなら。";

        System.out.println(s);

    }

}
こんにちは。

解説

「? : 」が三項演算子です。「条件式 : 条件式がtrueのときの式 : 条件式がfalseのときの式」という使い方です。ここでは式というより値そのもの書いてます。flagをfalaseで初期化した場合、「さようなら。」が出力されます。三項演算子の使いかたはExcel関数のIF文と雰囲気が似ていると思います。

null回避で使う方法

三項演算子の他の使い方の例として、Stringがnullのときに他の値に書き換えたい場合では、if文使うより三項演算子のほうが1行で済みます。Stringは参照型変数なのでnullという値で初期化可能なのですが、nullのままの変数でprintlnで出力すると「null」という文字そのものが表示されます。なので三項演算子を使ってnullの場合を他の文字列に直すという場合があると思います(または空文字の場合)。以下にサンプルを挙げました。

package test;


public class HelloConditionalOperatorString {

    public static void main(String[] args) {

        String s = null;

        System.out.println("こんにちは。" + s + "さん。");

        System.out.println("こんにちは。"
                + (s == null ? "名無し" : s)
                + "さん。");

        s = "太郎";
        System.out.println("こんにちは。"
                + (s == null ? "名無し" : s)
                + "さん。");
    }

}
こんにちは。nullさん。
こんにちは。名無しさん。
こんにちは。太郎さん。

上記のプログラムの三項演算子では変数sがnullであるか判定し、falseならば変数s自身になります。オラクルのSQL関数にnvl関数というのがありますが、それと似ている気がします。

スポンサーリンク

おすすめQAサイト

エンジニア特化型Q&Aサイト【teratail(テラテイル)】:
このサイトはプログラミング特化型のQAサイトです。ソースを見やすく整形させた状態で表示させることが出来ます。