If 演算子

更新 : 2007 年 11 月

ショートサーキット評価を使用し、2 つの値の 1 つを選択して返します。If 演算子は、3 つまたは 2 つの引数を指定して呼び出すことができます。

If( [argument1,] argument2, argument3 )

3 引数での If 演算子の呼び出し

3 つの引数を使用して If を呼び出す場合、1 番目の引数は、Boolean としてキャストできる値に評価される必要があります。この Boolean 値は、他の 2 つの引数のどちらを評価して返すかを決定します。次の一覧は、If 演算子を 3 つの引数で呼び出す場合のみに適用されます。

指定項目

  • argument1
    必ず指定します。Boolean. 他の引数のどちらを評価して返すかを決定します。

  • argument2
    必ず指定します。Object. argument1 が True と評価される場合、この引数を評価して返します。

  • argument3
    必ず指定します。argument1 が False と評価される場合、この引数を評価して返します。

3 つの引数で呼び出される If 演算子は IIf 関数と同じように機能しますが、ショートサーキット評価を使用する点が異なります。IIf 関数は常に 3 つの引数すべてを評価しますが、3 つの引数の If 演算子が評価する引数は 2 つのみです。1 番目の If 引数が評価され、結果が Boolean 値つまり True または False としてキャストされます。値が True の場合、argument2 は評価されて値が返されますが、argument3 は評価されません。Boolean 式の値が False の場合は、argument3 が評価されて値が返され、argument2 は評価されません。3 つの引数で If を使用した場合の例を次に示します。

' This statement prints TruePart, because the first argument is true.
Console.WriteLine(If(True, "TruePart", "FalsePart"))

' This statement prints FalsePart, because the first argument is false.
Console.WriteLine(If(False, "TruePart", "FalsePart"))

Dim number = 3
' With number set to 3, this statement prints Positive.
Console.WriteLine(If(number >= 0, "Positive", "Negative"))

number = -1
' With number set to -1, this statement prints Negative.
Console.WriteLine(If(number >= 0, "Positive", "Negative"))

次の例では、ショートサーキット評価の値を示します。この例では、divisor がゼロでない場合は、変数 number を変数 divisor で 2 回割ります。ゼロの場合は、ランタイム エラーになるので、0 を返し、除算は行いません。If 式はショートサーキット評価を使用するので、1 番目の引数の値に基づいて、2 番目または 3 番目の引数を評価します。1 番目の引数が true の場合は、序数はゼロではなく、2 番目の引数を評価して除算を実行しても安全です。1 番目の引数が false の場合は、3 番目の引数のみが評価され、0 が返されます。したがって、序数が 0 の場合は、除算は実行されず、エラーは発生しません。一方、IIf はショートサーキット評価を使用しないので、1 番目の引数が false であっても、2 番目の引数が評価されます。このため、ゼロによる除算のランタイム エラーが発生します。

number = 12

' When the divisor is not 0, both If and IIf return 4.
Dim divisor = 3
Console.WriteLine(If(divisor <> 0, number \ divisor, 0))
Console.WriteLine(IIf(divisor <> 0, number \ divisor, 0))

' When the divisor is 0, IIf causes a runtime error, but If does not.
divisor = 0
Console.WriteLine(If(divisor <> 0, number \ divisor, 0))
' Console.WriteLine(IIf(divisor <> 0, number \ divisor, 0))

2 引数での If 演算子の呼び出し

If の 1 番目の引数は省略できます。したがって、2 つの引数のみで演算子を呼び出すことができます。次の一覧は、If 演算子を 2 つの引数で呼び出す場合のみに適用されます。

指定項目

  • argument2
    必ず指定します。参照型または null 許容型を指定する必要があります。Nothing 以外として評価される場合、この引数を評価して返します。

  • argument3
    必ず指定します。argument2 が Nothing と評価される場合は、この引数を評価して返します。

Boolean 引数を省略するときは、1 番目の引数に参照型または null 許容型を指定する必要があります。1 番目の引数が Nothing と評価されると、2 番目の引数の値が返されます。それ以外のすべての場合は、1 番目の引数の値が返されます。次の例は、この評価がどのように動作するのかを示します。

' Variable first is a nullable type.
Dim first? As Integer = 3
Dim second As Integer = 6

' Variable first <> Nothing, so its value, 3, is returned.
Console.WriteLine(If(first, second))

second = Nothing
' Variable first <> Nothing, so the value of first is returned again.
Console.WriteLine(If(first, second))

first = Nothing
second = 6
' Variable first = Nothing, so 6 is returned.
Console.WriteLine(If(first, second))

参照

概念

null 許容値型

参照

Nothing (Visual Basic)

IIf 関数