J'ai un tel code :
if (a() && b != null) {
b.doSomething();
}
J'ai besoin de l'effet secondaire de a()
même si b
es null
. Est-il garanti par C# ? Ou C# peut omettre a()
appeler si b
es null
?
J'ai un tel code :
if (a() && b != null) {
b.doSomething();
}
J'ai besoin de l'effet secondaire de a()
même si b
es null
. Est-il garanti par C# ? Ou C# peut omettre a()
appeler si b
es null
?
Oui, a()
sera toujours évaluée.
Puisque la condition est évaluée de gauche à droite, a()
sera toujours évalué, mais b != null
ne sera évalué que si a()
renvoie à true
.
Voici une référence exacte pour vous, tirée de la spécification du langage C# version 3.0. Mes accentuations et élisions.
7.11.1 Opérateurs logiques conditionnels booléens
Lorsque les opérandes de
&&
o||
sont de typebool
[...] l'opération est traitée comme suit :
- L'opération
x && y
est évalué comme suitx ? y : false
. En d'autres termes,x
es primero évaluée et convertie en type bool. Ensuite, six
est vrai y est évalué et converti en type bool, ce qui devient le résultat de l'opération. l'opération. Sinon, le résultat de l'opération est faux.
Oui, les expressions sont évaluées de gauche à droite, donc a()
sera toujours appelé.
Voir le Spécification du langage C# (ECMA 334, paragraphe 8.5) :
À l'exception des opérateurs d'assignation, tous les opérateurs binaires sont gauche, ce qui signifie que les opérations sont effectuées de gauche à droite. droite. Par exemple, x + y + z est évalué comme (x + y) + z.
a()
sera toujours évaluée. b != null
ne sera évalué que si a()
est évalué à true.
C'est ce qu'on appelle évaluation des courts-circuits .
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.