If 연산자(Visual Basic)

단락 평가를 사용하여 두 값 중 하나를 조건부로 반환합니다. If 연산자는 세 개의 인수 또는 두 개의 인수를 사용하여 호출할 수 있습니다.

구문

If( [argument1,] argument2, argument3 )

연산자가 세 개의 인수로 호출된 경우

세 개의 인수를 사용하여 If를 호출하는 경우 첫 번째 인수는 Boolean으로 캐스팅할 수 있는 값으로 평가되어야 합니다. 해당 Boolean 값은 다른 두 인수 중 평가되고 반환되는 인수를 결정합니다. 다음 목록은 세 개의 인수를 사용하여 If 연산자를 호출하는 경우에만 적용됩니다.

부분

용어 정의
argument1 필수입니다. Boolean. 평가하고 반환할 다른 인수를 결정합니다.
argument2 필수입니다. Object. argument1True로 평가되면 평가되고 반환됩니다.
argument3 필수입니다. Object. argument1False로 평가되거나 argument1Nothing으로 평가되는 NullableBoolean 변수인 경우 평가되고 반환됩니다.

세 개의 인수로 호출되는 If 연산자는 단락 평가를 사용한다는 점을 제외하면 IIf 함수처럼 작동합니다. IIf 함수는 항상 세 개의 인수를 모두 평가하는 반면, 세 개의 인수가 있는 If 연산자는 그중 두 개만 평가합니다. 첫 번째 If 인수가 평가되고 결과가 Boolean 값, True 또는 False로 캐스팅됩니다. 값이 True이면 argument2가 평가되고 해당 값이 반환되지만 argument3은 평가되지 않습니다. Boolean 식의 값이 False인 경우 argument3이 평가되고 해당 값이 반환되지만 argument2는 평가되지 않습니다. 다음 예에서는 세 개의 인수가 사용될 때 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가 0인 경우를 제외하고 변수 number를 변수 divisor로 나누려는 두 번의 시도를 보여 줍니다. 이 경우 0이 반환되어야 하며 런타임 오류가 발생하므로 나누기를 수행하려고 시도해서는 안 됩니다. If 식은 단락 평가를 사용하므로 첫 번째 인수 값에 따라 두 번째 또는 세 번째 인수를 평가합니다. 첫 번째 인수가 true인 경우 제수는 0이 아니며 두 번째 인수를 평가하고 나누기를 수행하는 것이 안전합니다. 첫 번째 인수가 false이면 세 번째 인수만 평가되고 0이 반환됩니다. 따라서 제수가 0이면 나누기를 수행하려고 시도하지 않으며 오류 결과도 발생하지 않습니다. 그러나 IIf는 단락 평가를 사용하지 않으므로 첫 번째 인수가 false인 경우에도 두 번째 인수가 평가됩니다. 이로 인해 런타임 0으로 나누기 오류가 발생합니다.

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 run-time error, but If does not.
divisor = 0
Console.WriteLine(If(divisor <> 0, number \ divisor, 0))
' Console.WriteLine(IIf(divisor <> 0, number \ divisor, 0))

연산자가 두 개의 인수로 호출된 경우

If의 첫 번째 인수는 생략될 수 있습니다. 이렇게 하면 두 개의 인수만 사용하여 연산자를 호출할 수 있습니다. 다음 목록은 두 개의 인수를 사용하여 If 연산자를 호출하는 경우에만 적용됩니다.

부분

용어 정의
argument2 필수입니다. Object. 참조 또는 null 허용 값 형식이어야 합니다. Nothing 이외의 것으로 평가되면 평가되어 반환됩니다.
argument3 필수입니다. Object. argument2Nothing으로 평가되면 평가되어 반환됩니다.

Boolean 인수가 생략되면 첫 번째 인수는 참조 또는 null 허용 값 형식이어야 합니다. 첫 번째 인수가 Nothing으로 평가되면 두 번째 인수의 값이 반환됩니다. 다른 모든 경우에는 첫 번째 인수의 값이 반환됩니다. 다음 예에서는 이 평가가 작동하는 방식을 보여 줍니다.

' 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))

참고 항목