Go에서의 단락 평가: 실행 순서 및 성능
프로그래밍에서 단락 평가는 논리식을 평가하는 최적화 기법입니다. 결과가 이미 알려진 경우 부분적으로만 가능합니다. 이는 불필요한 계산을 피함으로써 성능을 향상시킬 수 있습니다.
Go에서는 &&(논리 AND) 및 ||에 대해 단락 평가가 구현됩니다. (논리 OR) 연산자. 즉, 논리식의 첫 번째 피연산자가 &&에 대해 false로 평가되거나 ||에 대해 true로 평가되면 두 번째 피연산자는 평가되지 않습니다.
다음 코드 조각을 고려하세요.
if !isValidQueryParams(&queries) || r == nil || len(queries) == 0 { return "", fmt.Errorf("invalid querystring") }
if r == nil || len(queries) == 0 || !isValidQueryParams(&queries) { return "", fmt.Errorf("invalid querystring") }
두 경우 모두 r이 nil이거나 len(queries)가 0이면 조건 순서에 관계없이 isValidQueryParams(&queries) 호출이 실행되지 않습니다. 이는 Go가 단락 평가 규칙을 따르기 때문입니다.
이를 입증하려면 다음 코드를 고려하세요.
for i := 0; i < 10; i++ { if testFunc(1) || testFunc(2) { // do nothing } } func testFunc(i int) bool { fmt.Printf("function %d called\n", i) return true }
이 코드를 실행하면 항상 인쇄됩니다.
$ function 1 called $ function 1 called $ function 1 called $ function 1 called $ function 1 called $ function 1 called $ function 1 called $ function 1 called $ function 1 called $ function 1 called
이는 Go가 논리 OR 표현식(testFunc(1))의 첫 번째 피연산자를 평가하고 true ||이므로 즉시 true를 반환한다는 것을 보여줍니다. 무엇이든 항상 사실입니다. 결과적으로 두 번째 피연산자(testFunc(2))는 실제로 호출되지 않습니다.
따라서 Go의 논리식 조건 순서는 단락 평가가 적용될 때 성능에 영향을 미칠 수 있습니다. 최적의 순서는 특정 상황과 각 조건이 참이거나 거짓일 가능성에 따라 달라집니다.
위 내용은 Go의 단락 평가는 논리식의 조건 순서에 어떤 영향을 미치나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!