Go の短絡評価は論理式の条件の順序にどのような影響を与えますか?

Linda Hamilton
リリース: 2024-11-07 17:04:03
オリジナル
705 人が閲覧しました

How does Go's short circuit evaluation affect the order of conditions in logical expressions?

Go における短絡評価: 実行順序とパフォーマンス

プログラミングにおける短絡評価は、論理式が評価される最適化手法です。結果がすでにわかっている場合は部分的にのみ。これにより、不要な計算が回避され、パフォーマンスが向上します。

Go では、&& (論理積) と || に対して短絡評価が実装されています。 (論理 OR) 演算子。これは、論理式の最初のオペランドが && の場合は false、または || の場合は true と評価される場合、2 番目のオペランドは評価されないことを意味します。

次のコード スニペットを考えてみましょう:

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 を返すことを示しています。何でも常に真実です。その結果、2 番目のオペランド (testFunc(2)) は実際には呼び出されません。

したがって、Go の論理式内の条件の順序は、短絡評価が適用される場合のパフォーマンスに影響を与える可能性があります。最適な順序は、特定の状況と、各条件が true または false になる可能性によって異なります。

以上がGo の短絡評価は論理式の条件の順序にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!