(또는 기타 및 기타) 및 (및 기타) - 언제 사용해야 합니까?
(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
'programing' 카테고리의 다른 글
R 함수에서 선택적 인수를 지정하는 "올바른" 방법 (0) | 2023.06.22 |
---|---|
C/C++의 프로젝트에 대한 메이크 파일에 대한 종속성 생성 (0) | 2023.06.22 |
Angular2 - 데바운스 시간이 있는 테스트 호출 (0) | 2023.06.22 |
MongoDB 특정 배열 값 바꾸기 (0) | 2023.06.22 |
UI 이미지를 파일에 저장하려면 어떻게 해야 합니까? (0) | 2023.06.22 |