首頁 > 後端開發 > Golang > Go 的短路求值如何影響邏輯表達式中條件的順序?

Go 的短路求值如何影響邏輯表達式中條件的順序?

Linda Hamilton
發布: 2024-11-07 17:04:03
原創
784 人瀏覽過

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

Go 中的短路求值:執行順序與效能

在程式設計中,短路求值是一種對邏輯運算式求值值的最佳化技術如果結果已知,則僅部分地進行。這可以透過避免不必要的計算來提高效能。

在 Go 中,短路評估是針對 &&(邏輯與)和 || 實現的。 (邏輯或)運算子。這意味著,如果邏輯表達式的第一個運算元對於 && 計算結果為 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板