programing

(또는 기타 및 기타) 및 (및 기타) - 언제 사용해야 합니까?

padding 2023. 6. 22. 21:35
반응형

(또는 기타 및 기타) 및 (및 기타) - 언제 사용해야 합니까?

(Or Else 및 Or)와 (And Als 및 And)의 차이점은 무엇입니까?그들의 성과에 차이가 있습니까, 예를 들어 정확성의 이점이 있습니까?제가 OrElse와 AndAlso를 사용하면 안 되는 상황이 있습니까?

Or/And항상 두 식을 모두 평가1 다음 결과를 반환합니다.그것들은 합선이 아닙니다.

OrElse/AndAlso단락이 있습니다.오른쪽 식은 왼쪽 식의 평가만으로 결과를 결정할 수 없는 경우에만 평가됩니다.(즉, 다음과 같습니다.OrElse왼쪽 표현식이 거짓인 경우에만 올바른 표현식을 평가합니다.AndAlso왼쪽 식이 참인 경우에만 올바른 식을 평가합니다.)

식에서 부작용이 발생하지 않고 식이 종속적이지 않으며 실행 오버헤드가 무시된다고 가정하면 동일합니다.

그러나 대부분의 경우 표현식은 종속적입니다.예를 들어 List가 Not-Nothing이고 두 개 이상의 요소가 있는 경우 작업을 수행하려고 합니다.

If list IsNot Nothing AndAlso list.Length > 0 Then .. 'list has stuff

이것은 또한 "비싼" 계산(또는 부작용, ick!)을 피하기 위해 사용될 수 있습니다.

If Not Validate(x) OrElse Not ExpensiveValidate(x) Then .. 'not valid

개인적으로, 저는 그것을 발견합니다.AndAlso그리고.OrElse부작용이 필요한 경우 1% 또는 그 이하를 제외한 모든 경우에 사용할 올바른 연산자입니다.

해피 코딩.


1 첫 번째 식에 예외가 던져지면 두 번째 식이 평가되지 않습니다. 하지만 이는 놀라운 일이 아닙니다.

다른 답변에 언급된 단락 이외에,Or/And비트 연산자로 사용할 수 있습니다.OrElse/AndAlso그렇지 않습니다.비트 단위 작업에는 파일이 읽기 전용임을 나타낼 수 있는 FileAttributes 열거와 같은 Flags 열거 값의 결합이 포함됩니다.FileAttributes.ReadOnly Or FileAttributes.Hidden

차이점은 OrElse와 AndAlso가 첫 번째 조건을 기준으로 단락된다는 것입니다. 즉, 첫 번째 조건이 통과하지 않으면 두 번째(또는 그 이상) 조건이 평가되지 않습니다.이는 조건 중 하나가 다른 조건보다 더 집중적일 수 있는 경우에 특히 유용합니다.

예:Or양호함(두 조건 모두 평가됨):

If Name = "Fred" Or Name = "Sam" Then

그들이 어느 쪽으로 평가받는지는 정말 중요하지 않습니다.

은 다과같것들.AndAlso할 수 합니다.

If Not SomeObject Is Nothing AndAlso CheckObjectExistsInDatabase(SomeObject) Then

이렇게 하면 첫 번째 조건에서 개체가 설정되었는지 여부를 확인하고 설정된 경우에만 데이터베이스(또는 다른 작업)를 확인할 수 있습니다.만약 이것이 평범한 것이었다면.And키워드, 둘 다 평가됩니다.

@기디언 - 누군가가 그것을 지적해서 기쁩니다.다음은 AndAlso의 극적인 영향을 보여주는 간단한 테스트입니다.

    Dim tm As New Stopwatch
    Const tries As Integer = 123456
    Dim z As Integer = 0
    Dim s() As String = New String() {"0", "one"}

    Debug.WriteLine("AndAlso")
    For x As Integer = 0 To s.Length - 1
        z = 0
        tm.Restart() 'restart the stopwatch
        For y As Integer = 0 To tries
            If s(x) = x.ToString AndAlso s(x) = y.ToString Then '<<<<<<<<<<
                z += 1
            End If
        Next
        tm.Stop()
        Debug.WriteLine(x.ToString.PadRight(3, " "c) & z.ToString.PadRight(10, " "c) & tm.Elapsed.ToString)
    Next

    Debug.WriteLine("And")
    For x As Integer = 0 To s.Length - 1
        z = 0
        tm.Restart() 'restart the stopwatch
        For y As Integer = 0 To tries
            If s(x) = x.ToString And s(x) = y.ToString Then '<<<<<<<<<<
                z += 1
            End If
        Next
        tm.Stop()
        Debug.WriteLine(x.ToString.PadRight(3, " "c) & z.ToString.PadRight(10, " "c) & tm.Elapsed.ToString)
    Next

언급URL : https://stackoverflow.com/questions/8409467/orelse-and-or-and-andalso-and-and-when-to-use

반응형