Bonjour
Dans un expression conditionnelle, par défaut, est-ce que toute l'expression est évaluée ?
Exemple:
if (1 == 2 & 3 == 3)
{
}
est-ce que 3 == 3 est évaluée ou pas ?
Y a t-il une directive de compilation pour jouer là-dessus ?
J-L
Bonjour
Dans un expression conditionnelle, par défaut, est-ce que toute l'expression est évaluée ?
Exemple:
if (1 == 2 & 3 == 3)
{
}
est-ce que 3 == 3 est évaluée ou pas ?
Y a t-il une directive de compilation pour jouer là-dessus ?
J-L
salut
à priori, enfin, ca depend des compilos mais pourquoi évaluer TOUTES les expressions si on fait du ET logique si on en trouve 1 de fausse...
En terme d'optimisation, ca serait idiot... si on veut que du oui, dès qu'une condition est à False, autant arreter le traitement
C'est, je crois, l'approche logique souvent implémentée
Pourquoi aurais tu besoin d'évaluer les autres conditions ?
The Monz, Toulouse
C'est vrai que ç aparait idiot comme ça mais sous Delphi win 32 avec lequel je développais avant, il y avait cette possibilité. Ca devait bien avoir son utilité.
Dans mon cas actuel, j'ai besoin que ça ne soit pas évalué entièrement. J'espère donc que C# fait bien ça par défaut.
pour moi, ca ne sera pas évalué
Cela dit, je trouve cela "dangereux" de devoir coder des choses en ayant besoin de connaitre le fonctionnement du compilateur
The Monz, Toulouse
dans certain langage
& => tous est évalué
&&=> des que la condition est évalué on arrête
en c# je suis pas sur
je confirme, c'est pareil en C#.Comme en C / C++ (et java probablement), ça permet d'écrire par exemple if (monObjet != null && monObjet.Machin) sans que ça pète un NullReferenceException.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 bool f() { UnTruc(); return false; } bool g() {UnTruc(); return true; } bool a = f() & g(); // UnTruc sera appelée deux fois bool b = f() && g(); // UnTruc sera appelée une seule fois car f retourne false
Ok merci ...
à titre d'info, un extrait de l'aide Delphi 6 pour windows 32:
Type Bascule
Syntaxe {$B+} ou {$B-}
{$BOOLEVAL ON} ou {$BOOLEVAL OFF}
Défaut {$B-}
{$BOOLEVAL OFF}
Portée Locale
Remarque
La directive $B permet d'alterner entre les deux modèles de génération de code pour les opérateurs booléens and et or.
En mode {$B+}, le compilateur génère un code évaluant entièrement les expressions booléennes. Tous les opérandes des expressions booléennes contenant des opérateurs and et or sont alors évalués, même si le résultat de l'expression totale est déjà connu.
En mode {$B-}, le compilateur génère un code d'évaluation "court-circuit" des expressions booléennes. Cela signifie que l'évaluation s'arrête à partir du moment où le résultat de l'expression devient évident dans l'ordre d'évaluation de gauche à droite.
Pour plus d'informations, recherchez "Opérateurs booléens" dans le Guide du langage Pascal Objet.
Partager