Maison > Article > développement back-end > Comment l'évaluation de court-circuit de Go affecte-t-elle l'ordre des conditions dans les expressions logiques ?
Évaluation de court-circuit en Go : ordre d'exécution et performances
En programmation, l'évaluation de court-circuit est une technique d'optimisation où une expression logique est évaluée seulement partiellement si le résultat est déjà connu. Cela peut améliorer les performances en évitant les calculs inutiles.
Dans Go, l'évaluation des courts-circuits est implémentée pour && (ET logique) et || (OU logique). Cela signifie que si le premier opérande d'une expression logique est évalué comme faux pour &&, ou vrai pour ||, le deuxième opérande ne sera pas évalué.
Considérez les extraits de code suivants :
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") }
Dans les deux cas, si r vaut nil ou len(queries) vaut 0, l'appel à isValidQueryParams(&queries) ne sera pas exécuté, quel que soit l'ordre des conditions. En effet, Go suit les règles d'évaluation des courts-circuits.
Pour démontrer cela, considérez le code suivant :
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 }
L'exécution de ce code imprimera toujours :
$ 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
Cela démontre que Go évalue le premier opérande de l'expression logique OU (testFunc(1)) et renvoie immédiatement true car true || tout est toujours vrai. Par conséquent, le deuxième opérande (testFunc(2)) n'est jamais réellement appelé.
Par conséquent, l'ordre des conditions dans une expression logique en Go peut avoir un impact sur les performances lorsque l'évaluation d'un court-circuit est appliquée. L'ordre optimal dépendra des circonstances spécifiques et de la probabilité que chaque condition soit vraie ou fausse.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!