Évaluation de court-circuit en Go
En programmation informatique, l'évaluation de court-circuit est une technique d'optimisation qui améliore les performances des instructions conditionnelles en sautant les évaluation des conditions ultérieures une fois qu’une condition est remplie. Ce comportement est destiné à éviter des calculs inutiles, en particulier lorsqu'une condition implique implicitement le résultat des autres.
Évaluation du court-circuit de Go
Go suit le principe du court-circuit évaluation. En d’autres termes, dans une instruction if, Go n’évalue les conditions suivantes que si les précédentes ne sont pas remplies. Cela s'applique à la fois à l'instruction if-else et à l'instruction if sans clause else.
Comparaison des performances
Analysons les deux extraits de code fournis dans la question :
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 == nil ou len(queries) == 0, le La fonction isValidQueryParams ne sera pas appelée car l'expression globale est déjà fausse. Par conséquent, les optimisations de performances peuvent ne pas être significatives dans ce contexte particulier.
Exemple
Pour démontrer l'évaluation d'un court-circuit en action, considérons le code suivant :
package main import "fmt" func main() { 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 affichera :
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
Comme vous pouvez le voir, la fonction testFunc avec argument 2 n'est jamais appelé car la première condition (testFunc(1)) est toujours évaluée à true. Cela illustre comment l'évaluation des courts-circuits évite les appels de fonction inutiles.
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!