Ausführungsreihenfolge logischer Operatoren
Beim Verwenden von logischen UND- und logischen ODER-Operatoren muss Go die booleschen Werte auf beiden Seiten des Operators bestimmen. Aber welche Seite wird zuerst ausgewertet?
Lassen Sie uns das gemeinsam untersuchen.
Schreiben Sie folgenden Code in opePractice.go
:
package main
import "fmt"
func leftFunc(flag bool) bool {
fmt.Println("Left function is called!")
return flag
}
func rightFunc(flag bool) bool {
fmt.Println("Right function is called!")
return true
}
func main() {
if leftFunc(true) && rightFunc(true) {
fmt.Println("Evaluation is complete")
}
}
Führen Sie den Code aus:
cd ~/project
go run opePractice.go
Left function is called!
Right function is called!
Evaluation is complete
Es fällt nicht schwer zu erkennen, dass bei der logischen UND-Operation zuerst der linke Operand ausgewertet wird und dann der rechte Operand.
Wie sieht es bei der logischen ODER-Operation aus? Schreiben Sie folgenden Code in opePractice.go
:
package main
import "fmt"
func leftFunc(flag bool) bool {
fmt.Println("Left function is called!")
return flag
}
func rightFunc(flag bool) bool {
fmt.Println("Right function is called!")
return true
}
func main() {
if leftFunc(true) || rightFunc(true) {
fmt.Println("Logical OR evaluation is complete")
}
}
Führen Sie den Code aus:
cd ~/project
go run opePractice.go
Left function is called!
Logical OR evaluation is complete
Die Auswertungsreihenfolge sowohl bei logischen UND- als auch bei logischen ODER-Operationen erfolgt von links nach rechts.
Jedoch wird bei der logischen ODER-Operation, wenn der linke Operand true
ist, der rechte Operand nicht ausgewertet.
Daher sollten wir in der praktischen Entwicklung die Bedingungen, die wahrscheinlicher true
sind, auf die linke Seite des logischen ODER-Operators setzen, um die Ausführungszeit des Programms zu verkürzen.