短絡評価について私が理解しているのは、式は if 文で必要な場合にのみ呼び出されるということです。Go はこれに従いますか?
たとえば、次のような場合、平均的にパフォーマンスは向上しますか。
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")
}
...これは、マップの長さをテストするisValidQueryParams
よりもはるかにオーバーヘッドが大きい関数なのでは?r == nil
つまり、インタープリターは最初に r == nil を評価し、それが真であることを確認して、他の条件を評価しないのでしょうか?
編集: 短絡評価を遅延評価と誤って呼んでいました
ベストアンサー1
回答をくださった Kostix さんと mkrieger さんに感謝します。彼らの答えは正しいです。私は遅延評価ではなく短絡評価について言及しています。
Go では、次のコードからわかるように、通常の短絡評価が実装されています。
package main
import "fmt"
func main() {
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