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 ?

Comment l'évaluation de court-circuit de Go affecte-t-elle l'ordre des conditions dans les expressions logiques ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-07 17:04:03777parcourir

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

É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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn