はかせのラボ

私の頭の中を書いていく雑記ブログです

C# 三項演算子

あいさつ

どうも、はかせです。
前回AWSのサービスをなめてみて
とりあえず入り口である認証からと思いCognitoを使ってみようとしました。
ただまぁ私のTwitterとか見てもらえればわかると思いますが、
現在全く何もできておりません(´;ω;`)

ただ何もできねぇってのを記事にするのも忍びないので、
今回はサンプルコードでも見かけた三項演算子について書きます。
※この記事ではC#三項演算子について取り扱います

三項演算子とは

名前の通り三つの値を扱う演算子です。
扱う値は
・条件式のbool
・true時の値
・false時の値

この三つです。
とりあえずまずは例をば

static void Main(string[] args)
{
    string msg = "";
    int num = 0;
    while (true)
    {
        Console.Write("数値を入力してください(0で終了):");
        num = int.Parse(Console.ReadLine());
        if (num == 0) break;
        //ここで三項演算子
        msg = num % 2 == 0 ? "偶数" : "奇数";
        Console.WriteLine(msg);
    }
    Console.ReadLine();
}

ユーザーの入力した値の偶奇判定をするプログラムになります。
三項演算子はこの部分ですね。

 //ここで三項演算子
msg = num % 2 == 0 ? "偶数" : "奇数";

入力された値を2で割った余りが0ならば偶数、
0以外ならば奇数と判定しています。
使い方は以上ですね。

三項演算子を使う場面

三項演算子が有用な場面はほぼ決まっています。
それは
一つの条件式の真偽だけで値が一意に決まる場合
私はこの場面のみ三項演算子を使うべきだと考えています。

例えば例で挙げた偶奇判定。
これは値を2で割り切れるか否かだけで
偶数か奇数かが決まります。

この偶奇判定を素直にif文でやると

if (num % 2 == 0)
{
        msg = "偶数";
}
else
{
        msg = "奇数";
}

こうなりますよね。
これが三項演算子を使うと

msg = num % 2 == 0 ? "偶数" : "奇数";

8行あったものが1行にまとまりました。
見方もベーシックだとかエクセルだとかで見るような書式に近いので
割とわかりやすいと個人的には思っています。

使うべきでない場面

上記の例に該当しない場面全てですね。
色んなところで三項演算子は使うなとか言われるのは
この背景があると思います。

理由は上記の例に当てはまるような場面以外だと
どんどん普段見慣れない形になっていって見づらくなるからです。

hoge =
  hoge == "a" ? "b" :
  hoge == "b" ? "c" :
//以下無限に続く・・・

まぁネストとか絡んでくるとこんなんなってくるわけです。
なので使っていい場面以外は使うべきではないでしょう。

あとがき

今回はサンプルなどでよく見る三項演算子についてでした。
私自身は1行でまとまるし、割と見慣れてるしで結構好きなんですが、
苦手な人は結構いるイメージです。

ただサンプルのコードだとか
ライブラリのコードとかだと
少しでも行数を減らそうとしてなのかこの書き方を使われることが
多い印象です。

完全理解はできなくてもこんな動きしてるんだくらいは
追えるようになっておくと何かと便利なのではないでしょうか。

それでは今回はこの辺でノシ