Salut tout le monde,
comme indiqué ici : http://delphi.developpez.com/faq/?pa...ees#ifimmediat
je fais un IF immédiat (comme l'opérateur ternaire en C) dont voici le code :
Puis je l'utilise dans l'exemple ci dessous
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 function IIF( aCondition : Boolean; aResultVrai, aResultFaux : Integer ) : Integer; begin if aCondition then Result := aResultVrai else Result := aResultFaux; end;
Sauf qu'avant de rentrer dans le IIF, Delphi évalue les 3 paramètres, donc la condition et les 2 résultats possibles, et le second créé bien évidement une violation d'accés quand FObjet est nil.
Code : Sélectionner tout - Visualiser dans une fenêtre à part FIndexDsParent := IIF( FObjet = nil, FCount, FObjet.IndexDsGroupeParent );
Dans ce cas précis, il est bien évidement possible de faire avec un simple IF classique, mais j'aurrais voulu savoir s'il n'était pas possible de n'évaluer les paramètres que lorsque ceux ci sont utiles.
Ce serrait un peu comme quand on fait un
qui ne fait pas de violation d'accés car on ne teste la seconde opérande que si la première est True.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Result := (FObjet <> nil) and (FObjet.ValeurBool);
(pour cela décocher Evaluation booléenne complète dans les options du projet ou bien rajouter {$B-} comme instruction pour le préprocesseur).
Merci pour vos réponses.
Partager