三項演算子とは
三項演算子(条件演算子)とは、条件式の結果により異なる式が評価される演算子です。
真偽値式・真の場合に評価する式・偽の場合に評価する式 からなります。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
コメントを書く