[vb.net] IsNothing 대 Is Nothing

여기에 VB.NET을 사용하는 사람이 있습니까 (예 : 또는 ) IsNothing와 반대되는 사용 을 선호하거나 반대 합니까? 그렇다면 왜 그렇습니까?Is NothingIf IsNothing(anObject)If anObject Is Nothing...

편집 : 둘 다 똑같이 수용 가능하다고 생각되면 하나를 선택하고 고수하는 것이 가장 좋다고 생각합니까, 아니면 혼합해도 괜찮습니까?



답변

MSIL이 실행될 때 살펴보면 정확히 동일한 코드로 컴파일되지 않는다는 것을 알 수 있습니다. IsNothing ()을 사용하면 표현식을 평가하는 대신 실제로 해당 메소드를 호출합니다.

“Is Nothing”을 사용하는 경향이있는 이유는 내가 개인적으로 더 읽기 쉬운 것처럼 보이는 “Not IsNothing (object)”가 아니라 “IsNot Nothing”이되는 것을 부정 할 때입니다.


답변

나는 것을 발견 패트릭 스틸은 자신의 블로그에이 질문에 최선을 대답 IsNothing 방지 ()

Patrick Steele이 자신의 게시물에 대한 신용을 얻도록 그의 답변을 여기에 복사하지 않았습니다. 그러나 Is Nothing 또는 IsNothing 중 어느 것을 사용할지 결정하려고한다면 그의 게시물을 읽어야한다고 생각합니다. Is Nothing이 최선의 선택이라는 데 동의 할 것입니다.

편집-VoteCoffe의 의견은 여기에

부분 기사 내용 : 더 많은 코드를 검토 한 후 이것을 피해야하는 또 다른 이유를 발견했습니다. 값 유형을 허용합니다! 분명히 IsNothing ()은 ‘객체’를 허용하는 함수이므로 원하는 것을 전달할 수 있습니다. 값 형식 인 경우 .NET은 개체에 상자를 만들어 IsNothing에 전달합니다.이 값은 항상 상자 값에 대해 false를 반환합니다! VB.NET 컴파일러는 “Is Nothing”스타일 구문을 검사하고 값 유형에 대해 “Is Nothing”을 시도하면 컴파일되지 않습니다. 그러나 IsNothing () 함수는 불만없이 컴파일됩니다. PSteele – VoteCoffee


답변

절대로 사용하지 마십시오 IsNothing()

IsNothing () VS Is Nothing 기사의 4 가지 이유 는 다음과 같습니다.

  1. 가장 중요한 것은 IsNothing(object)모든 것이 객체, 심지어 값 유형으로 전달 된 것입니다! 값 유형은 일 수 없으므로 Nothing완전히 낭비되는 검사입니다.
    다음 예제를 보자.

    Dim i As Integer
    If IsNothing(i) Then
       ' Do something 
    End If
    

    이것은 컴파일되고 잘 실행되지만 반면에 :

    Dim i As Integer
    If i Is Nothing Then
        '   Do something 
    End If
    

    컴파일하지 않고 대신 컴파일러에서 오류가 발생합니다.

    ‘Is’연산자는 ‘Integer’유형의 피연산자를 허용하지 않습니다.
    피연산자는 참조 또는 널 입력 가능 유형이어야합니다.

  2. IsNothing(object)실제로의 일부입니다 Microsoft.VisualBasic.dll.
    VisualBasic 라이브러리에 대한 불필요한 종속성이 있으므로 바람직하지 않습니다.

  3. 느리게-실제로 33.76 % 느리게 (1000000000 반복 이상)!

  4. 아마도 개인적인 취향이지만 요다 조건IsNothing() 처럼 읽습니다 . 변수를 볼 때 조사 대상으로 변수의 상태를 확인하고 있습니다.

    즉 수행 X합니까? — NOT 인가 x의 속성 보내고 그것을 ?

    그래서 나는 If a IsNot Nothing더 잘 읽습니다If Not IsNothing(a)


답변

“아무것도 없습니다”에 동의합니다. 위에서 언급했듯이 “IsNot Nothing”으로 부정하기 쉽습니다.

나는 이것을 더 쉽게 읽을 수 있다고 생각합니다 …

If printDialog IsNot Nothing Then
    'blah
End If

이것보다…

If Not obj Is Nothing Then
    'blah
End If


답변

VB는 (영어와 같은 언어를 사용하고 {}를 많이 사용하는 언어에 익숙한 사람들에게 “영어처럼”편안하게 만들려고하는 것과 같은 것들로 가득합니다. 예를 들어 “like english”사이드에서 … VB에는 ” Ai n’t “키워드가 있습니다 … 아니요, 농담이 아닙니다. 그리고 다른 한편으로, 이미 알고있는 것처럼 대부분 원한다면 함수 호출과 함께 ()을 사용할 수 있지만 꼭 할 필요는 없습니다.

나는 IsNothing ()을 선호하지만 … C와 C #을 사용하므로 편안합니다. 그리고 더 읽기 쉽다고 생각합니다. 그러나 당신에게 더 편안한 느낌으로 가십시오.


답변

나는 “아무것도없는”대안으로 기울어지고있다. 왜냐하면 그것은 더 많은 OO로 보인다.

확실히 비주얼 베이직은 되지 않는다 (가) 키워드 아닌가 얻었다.


답변

또한 Is Nothing 버전을 SQL에서 사용하는 것보다 부분적으로 사용하는 경향이 있습니다.