PG日誌

読者です 読者をやめる 読者になる 読者になる

PG日誌

主にc#の事を書いています

フレッシュ!3項演算子!

c#

「うおーーー!久しぶりに見た!!」

最近仕事でお目にかかったことが無かったので提出されたときに非常に新鮮な感じを受けました。と同時に、できれば使わない方がいいかなとも思います。

なぜなら、3項演算子は「これ以上拡張の余地が無いから」から。。。

将来的に不変な、真偽値(2値判定)には良いのかもしれませんが以下のケースで不自由かと思います。預言者以外は利用非推奨推しです。

  • 2値以外へ変更になった時、結局書き換えないといけない
  • 3値以上の判定を3項演算子の複合文で書くと表現が難しいケースがある(Excelのマクロかよ!的世界観)
  • 評価結果はそれぞれ同じ戻り値を持たないといけない

例えばこんなコード(以降例えが頭弱で大変恐縮ですが…)

public int Foo(bool a, bool b)
{
   return a ? 1 : (b ? 2 : 3);
}

完全に Excel のセルの計算式ですね…
評価対象が2 つならギリギリ大丈夫ですが、3つの判定となると業務システムには禁忌の闇のテクニックが必要そうです。

あと、return = 3 の時に例外を出したいとかになったら

public int Foo(bool a, bool b)
{
   return a ? 1 : (b ? 2 : throw new NotSupportedException("This case is not suported."));
}

もちろん、こんな事はできないので if 文(か何かに)書き直す羽目になりそうです。
とは言ってもこうやって書き直すと

public int Foo(bool a, bool b)
{
    if(a || !b)
    {
        throw new NotSupportedException("This case is not suported.");
    }
    
    // 以降に3項演算子で式を評価しようとすると a || !b のケースで
    // 戻り値がを記述しないといけなくなり謎の値を入れないといけないご様子
    return a ? 1 : (b ? 2 : -1);
}

なので、折角コーディングしてもらい久しぶり見た3項演算子ですが、闇の世界に戻ってもらうことになりそうです。
.oO(というか今更だけどコーディング規約に使用禁止って書いてなかったっけ…?)

広告を非表示にする