[VB] 三項演算子と短絡評価(IF演算子,IIF関数)

[VB] 三項演算子と短絡評価(IF演算子,IIF関数)

三項演算子とは

三項演算子(条件演算子)とは、条件式の結果により異なる式が評価される演算子です。
真偽値式・真の場合に評価する式・偽の場合に評価する式 からなります。IF~THEM~ELSEと同じようですが、文ではなく式を評価します。

VB.NETの三項演算子

VB.NETの三項演算子は IF演算子 と IIF関数 の2つがあります。この2つの違いは 短絡評価(ショートサーキット)を行うかどうかです。VS2008以降で IF演算子 が利用できます。ちなみにC#の三項演算子は ?: 演算子しかなく、これは短絡評価を行います。

短絡評価(ショートサーキット)とは

「A or B」や「A and B」といった論理演算について、左辺(A)を評価して全体の評価が決まらないときのみ、右辺(B)を評価することを短絡評価といいます。つまり短絡評価では右辺(B)が必ずしも評価されるとは限りません。

例えば、左辺(A)がTrueのときは右辺(B)を評価しなくても、「A or B」の演算はTrueと決まります。したがって短絡評価では左辺(B)は評価されません。同様に「A and B」について、左辺(A)がFalseのときは右辺(B)が評価されません。

論理演算子では、VB.NETは「And, Or」と 短絡評価版「AndAlso, OrElse」、C#の「&, |」と 短絡評価版「&&, ||」があります。

三項演算子と短絡評価

次のサンプルでは、短絡評価を行うIF演算子のコードでは右辺が評価されないため “IF_R” は表示されません。

VB2008以降であれば、IF演算子を優先して使うべきだと思われます。

Shared Function Main() As Integer
    ' IIF関数
    Dim iif_ As String = IIf(True, Show("IIF_L"), Show("IIF_R")).ToString()

    ' IF演算子(短絡評価)
    Dim if_ As String = If(True, Show("IF_L"), Show("IF_R"))
End Function

Shared Function Show(ByVal str As String) As String
    ' 引数の文字列を表示して返すだけ
    Console.WriteLine(str)
    Return str
End Function

VB.NETカテゴリの最新記事