Bonjour,
Savez-vous s'il existe en Pascal un équivalent à cette expression en C :
Merci,Citation:
(test)?"Vrai":"Faux"
ZiP
Version imprimable
Bonjour,
Savez-vous s'il existe en Pascal un équivalent à cette expression en C :
Merci,Citation:
(test)?"Vrai":"Faux"
ZiP
Bonjour !
Je crois que cette fonction (qu'il faut écrire soi-même) répond à la question :
On peut s'inspirer de l'unité Delphi SJRDUsual. :)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 program Exemple; {$APPTYPE CONSOLE} function IIF(const b: boolean; const r1, r2: integer): integer; begin if b then result := r1 else result := r2; end; begin WriteLn(IIF(0>1, 1, 2)); // 2 ReadLn; end.
Bonjour,
On peut écrire cette fonction de manière plus générique, si le temps d'exécution n'est pas primordial : :lol:
On peut aussi utiliser la fonction IfThen présente dans les unités Math et StrUtilsCode:
1
2
3
4 function IIF(const Condition: Boolean; const TrueResult, FalseResult: Variant): Variant; begin if Condition then result := TrueResult else result := FalseResult; end;
Les 3 dernières sont inline, donc rapides. ;)Code:
1
2
3
4
5
6 // StrUtils Function IfThen(AValue: Boolean; const ATrue: string; const AFalse: string = ''): string; overload; // Maths function ifthen(val:boolean;const iftrue:integer; const iffalse:integer= 0) :integer; inline; overload; function ifthen(val:boolean;const iftrue:int64 ; const iffalse:int64 = 0) :int64; inline; overload; function ifthen(val:boolean;const iftrue:double ; const iffalse:double =0.0):double; inline; overload;
Bonsoir,
La fonction IIF de Ph. B. correspond tout à fait à ce que je cherche !
Merci,
ZiP
Attention, une fonction n'est pas un opérateur, dans le cas de l'opérateur de sélection (? : ), seule l'expression correspondant à la valeur du booléen est évaluée, alors que dans un appel de fonction, les deux expressions sont évaluées. C'est pas toujours génant mais cela peut être une source d'erreur à l'exécution, supposons que l'on ait un tableau dont l'indice le plus grand vaut MAX :
ainsi
plante si I>MAX alors queCode:IIF(I<=MAX,Tab[I],0)
passe comme une lettre à la poste.Code:(I<=MAX?Tab[I]:0)
cdlt