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 サイトの他の関連記事を参照してください。