Wie wirkt sich die Kurzschlussauswertung von Go auf die Reihenfolge der Bedingungen in logischen Ausdrücken aus?

Linda Hamilton
Freigeben: 2024-11-07 17:04:03
Original
703 Leute haben es durchsucht

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

Kurzschlussauswertung in Go: Ausführungsreihenfolge und Leistung

In der Programmierung ist die Kurzschlussauswertung eine Optimierungstechnik, bei der ein logischer Ausdruck ausgewertet wird nur teilweise, wenn das Ergebnis bereits bekannt ist. Dies kann die Leistung verbessern, indem unnötige Berechnungen vermieden werden.

In Go ist die Kurzschlussauswertung für && (logisches UND) und || implementiert (logische ODER-)Operatoren. Das heißt, wenn der erste Operand eines logischen Ausdrucks für && als falsch oder für || als wahr ausgewertet wird, wird der zweite Operand nicht ausgewertet.

Beachten Sie die folgenden Codeausschnitte:

if !isValidQueryParams(&queries) || r == nil || len(queries) == 0 {
    return "", fmt.Errorf("invalid querystring")
}
Nach dem Login kopieren
if r == nil || len(queries) == 0 || !isValidQueryParams(&queries) {
    return "", fmt.Errorf("invalid querystring")
}
Nach dem Login kopieren

Wenn r in beiden Fällen Null ist oder len(queries) 0 ist, wird der Aufruf von isValidQueryParams(&queries) nicht ausgeführt, unabhängig von der Reihenfolge der Bedingungen. Dies liegt daran, dass Go den Regeln zur Kurzschlussauswertung folgt.

Um dies zu demonstrieren, betrachten Sie den folgenden Code:

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
}
Nach dem Login kopieren

Beim Ausführen dieses Codes wird immer Folgendes ausgegeben:

$ 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
Nach dem Login kopieren

Dies zeigt, dass Go den ersten Operanden des logischen OR-Ausdrucks (testFunc(1)) auswertet und sofort true zurückgibt, weil true || alles ist immer wahr. Daher wird der zweite Operand (testFunc(2)) nie tatsächlich aufgerufen.

Daher kann die Reihenfolge der Bedingungen in einem logischen Ausdruck in Go Auswirkungen auf die Leistung haben, wenn eine Kurzschlussauswertung angewendet wird. Die optimale Reihenfolge hängt von den spezifischen Umständen und der Wahrscheinlichkeit ab, dass jede Bedingung wahr oder falsch ist.

Das obige ist der detaillierte Inhalt vonWie wirkt sich die Kurzschlussauswertung von Go auf die Reihenfolge der Bedingungen in logischen Ausdrücken aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!