답변:
VB는 If
질문이 언급 하는 다음 진술을 가지고 있다고 생각합니다.
' Usage 1
Dim result = If(a > 5, "World", "Hello")
' Usage 2
Dim foo = If(result, "Alternative")
첫 번째는 기본적으로 C #의 삼항 조건 연산자이고 두 번째는 병합 연산자입니다 (이 result
아닌 Nothing
경우 반환,이 경우 return "Alternative"
). If
따라서 교체 IIf
되었으며 후자는 더 이상 사용되지 않습니다.
C #에서와 마찬가지로 VB의 조건부 If
연산자가 단락되므로 이제 IIf
함수를 사용하여 불가능한 다음을 안전하게 작성할 수 있습니다 .
Dim len = If(text Is Nothing, 0, text.Length)
If
가 IIf
함수 보다 훨씬 효율적 입니다.
That's all you need to know, really
지식 공유에 전념하는 웹 사이트에 도움이되는 태도처럼 들리지 않습니다.)
IIf()
참 및 거짓 코드를 모두 실행합니다. 숫자 할당과 같은 간단한 작업의 경우 큰 문제가 아닙니다. 그러나 모든 종류의 처리가 필요한 코드의 경우 일치하지 않는 조건을 실행하는주기를 낭비하고 부작용을 일으킬 수 있습니다.
코드 그림 :
Module Module1
Sub Main()
Dim test As Boolean = False
Dim result As String = IIf(test, Foo(), Bar())
End Sub
Public Function Foo() As String
Console.WriteLine("Foo!")
Return "Foo"
End Function
Public Function Bar() As String
Console.WriteLine("Bar!")
Return "Bar"
End Function
End Module
출력 :
Foo!
Bar!
또한 IIf의 또 다른 큰 문제는 인수 [1]에있는 모든 함수를 실제로 호출하므로 다음과 같은 상황이 발생하는 경우입니다.
string results = IIf(Not oraData.IsDBNull(ndx), oraData.GetString(ndx), string.Empty)
실제로 예외가 발생합니다. 대부분의 사람들이 함수를 처음 볼 때 작동한다고 생각하는 방식이 아닙니다. 이것은 또한 응용 프로그램에서 버그를 수정하기 매우 어렵게 만들 수도 있습니다.
[1] IIf 함수-http://msdn.microsoft.com/en-us/library/27ydhh0d(VS.71) .aspx
이 사람 에 따르면 IIf는 If / Then보다 최대 6 배까지 걸릴 수 있습니다. YMMV.
또한이 경우 성능보다 가독성이 더 선호 될 것입니다. IIF가 더 효율적이더라도 대상 청중이 쉽게 읽을 수는 없습니다 (Visual Basic에서 작업하는 경우 다른 프로그래머가 코드를 쉽게 읽을 수 있기를 원한다고 가정합니다. 이는 VB의 가장 큰 장점입니다 ... 제 의견으로는 IIF와 같은 개념으로 손실됩니다.)
또한 "IIF는 함수입니다. IF는 언어 구문의 일부입니다." ... 이는 실제로 If가 더 빠르다는 것을 의미합니다. 해당 기능에서 찾은 로직을 수행하기 위해 메모리의 다른 공간으로 이동하지 않고 작은 opcode 세트로 이동합니다. 아마도 진부한 차이이지만 주목할 가치가 있습니다.
If와 IIf의 주요 차이점은 다음과 같습니다.
If (test [boolean], statement1, statement2)는 테스트 값에 따라 satement1 또는 statement2가 실행됨을 의미합니다 (하나의 문만 실행 됨).
Dim obj = IIF (test [boolean], statement1, statement2)는 두 명령문이 모두 실행되지만 테스트 값에 따라 둘 중 하나가 (obj)에 값을 반환 함을 의미합니다.
따라서 문 중 하나가 예외를 throw하면 어쨌든 (IIf)에서 throw되지만 (If)에서는 조건이 해당 값을 반환하는 경우에만 예외를 throw합니다.
그 기능은 다릅니다! 아마도 IF 문만 사용하면됩니다. IIF는 두 기능을 모두 수행하고 표준 IF 문을 수행하기 때문에 항상 느립니다.
왜 IIF 기능이 있는지 궁금하다면 다음과 같은 설명이 될 것입니다.
Sub main()
counter = 0
bln = True
s = iif(bln, f1, f2)
End Sub
Function f1 As String
counter = counter + 1
Return "YES"
End Function
Function f2 As String
counter = counter + 1
Return "NO"
End Function
따라서 카운터는이 후 2가되지만 s는 "예"만됩니다. 이 카운터 항목이 쓸모 없다는 것을 알고 있지만 때로는 실행하는 데 필요한 함수가 있으며 IF가 참인지 거짓인지는 중요하지 않으며 그중 하나의 값을 변수에 할당하면됩니다.
IIf()
이런 식으로 사용 하면 코드를 읽는 사람들이 혼란 스러울 것입니다.
IIf
.