三項演算子 - 萌えJava超入門
第九章 制御文

三項演算子

if文の変形バージョンです。

? :


ちょっ!なんすかこれ!


大丈夫、お得意の「変な記号攻撃」だ。
実体はただの if文なんだ。
恐れることはない。
威嚇?!
私、またJavaに威嚇されてる?!



大きな声では言えないが、
重要度としては低い。
カッコイイから紹介したいだけだ!!

目次


1.書式

機能的には、if文と完全にかぶります。
個人的には好きな書き方なのですが、可読性に賛否両論ある書式です。
「読めるけど、自分で書くなら if文」というスタンスが最善かもしれません。
if文で書いた例も示しますので、比較してみて下さい。

条件式が trueなら 処理1の結果が変数に代入されます。
falseなら 処理2です。
書式
変数 = 条件式 ? 処理1 : 処理2

処理の実行だけが必要であれば、変数は無くても構いません。
書式 変数は無くても良い
条件式 ? 処理1 : 処理2

比較 if文で書くと
if(条件式){
    変数 = 処理1;
}else{
    変数 = 処理2;
}

やはりパッと見は if文の方がわかりやすいかもしれません。
ただ、if文は、変数が 2回でてくるのが冗長な感じですね。

2.使い方


Sample38_11 は、
card の値が 10以上の場合に point が10に、
card の値が 10より小さければ point が card の値になるプログラムです。
トランプのブラックジャック的な感じです。

//Sample38_11.java
class Sample38_11{
    public static void main(String[] args){
      /*A 2 3 4 5 6 7 8 9 10 J Q K*/
      int card = (int)(Math.random() * 13 + 1);
      System.out.println("card は "+ card +" です。");

      int point = card<10  ? card : 10;
      System.out.println("pointは "+ point +" です。");
    }
}

コマンドライン
>javac Sample38_11.java
>java Sample38_11
card は 3 です。
pointは 3 です。

>java Sample38_11
card は 11 です。
pointは 10 です。


以下の Sample38_12 は、同じ内容を if文 で書きました。

Sample38_12.java if文と比較
//Sample38_12.java
class Sample38_12{
    public static void main(String[] args){
      /*A 2 3 4 5 6 7 8 9 10 J Q K*/
      int card = (int)(Math.random() * 13 + 1);
      System.out.println("card は "+ card +" です。");

        int point;
        if( card < 10 ){
            point = card;
        }else{
            point = 10;
        }
        System.out.println("pointは "+ point +" です。");
    }
}

ここまで書きましたけど、やはり読み手からすると if文の方が読みやすいですね。
三項演算子が有効な場面は以下に限られると考えてます。

三項演算子が有効な場面
  1. 条件式の結果によって変数に代入する値を変えたい。
  2. 処理文が短い。
  3. 三項演算子に入れ子は止めておきましょう。



かっちょいいのに。
私は使うからな!



意味が分かれば
大して難しいことはないかな。
私はスルーでいいっス。

お疲れ様でした。




© 2019 awasekagami