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") }
if r == nil || len(queries) == 0 || !isValidQueryParams(&queries) { return "", fmt.Errorf("invalid querystring") }
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 }
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
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!