Go Ask Question における短絡評価

Go Ask Question における短絡評価

短絡評価について私が理解しているのは、式は 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

おすすめ記事