C#に慣れないVBユーザーが三項演算子をわかりやすいようにしてみた

三項演算子(条件演算子)という「? :」などの記号を使った条件式でコードを簡略化する記述方法があります。

[結果] = [条件式] ? [真式] : [偽式]
まぁ、やっていることは1行で記述できるIF文です。([条件式]は真偽値のみ)

ですが、はっきり言ってこの書き方は初心者にとっては「所見殺し」です。
サンプルコードを提供しているサイトではちゃんとIF文で記述されているので、あまりネットでは見かけたりすることはありませんが、実際の現場に入ると記述している人がいてなかなか戸惑います。

確かに代入などで、うまく使う分には可読性が良くなるので、意外に便利に使ってしまいがちなのですが、
このように無理に1行で書くために、三項演算子を入れ子構造にして記述してしまうと、逆に可読性が悪くなるケースもあります。

C#のコード

String message = weight <= 100 ? "OK" : weight == 100 ? "積載量ジャスト" : "積載量オーバー";

もうこうなると、どこで条件分岐しているのかパッと見でわからないので、初心者ではコードが読めません。

対策

なので、多少わかりやすくするためにカッコをつけることで対策を行います。

C#のコード

String message = (weight <= 100 ? "OK" : (weight == 100 ? "積載量ジャスト" : "積載量オーバー"));

これで三項演算式の区切りが見やすくなり、少しわかりやすくなりました。(こんな入れ子の関数記述なら大量にありますし)

VBユーザーらしい対策

ではもういっそのことVBユーザーらしい関数を作ってしまいましょう!

C#のコード

public dynamic IIF(bool jyoken, dynamic trueValue, dynamic falseValue) {
    if(joken){
        return trueValue;
    } else {
        return falseValue;
    }
}
//使い方
var message = IIF(weight <= 100, "OK", IIF(weight == 100, "積載量ジャスト", "積載量オーバー"));

VBユーザーおなじみのIIF関数ですね。これならVBAユーザーでもわかりやすく利用できます。
dynamic型が気になる方(旧バージョンで使えない方)は、ひとまずdynamic型のところをString型やInt型にした、オーバーロードを頑張って作ってください。

ちなみにVB.NETでは以下のようにふつうにIF関数(IIF関数)が利用できます。

'使い方
Dim message As String = IF(weight <= 100, "OK", IF(weight == 100 ? "積載量ジャスト", "積載量オーバー"))

'VS2008以前ではこっち
Dim message As String = IIF(weight <= 100, "OK", IIF(weight == 100 ? "積載量ジャスト", "積載量オーバー"))
この記事をシェアする
Tweet about this on Twitter
Twitter
Share on Facebook
Facebook
0

Comments

Comments