Operateur Ternaire
Sommaire
L'opérateur Ternaire
Avec l'arrivée d'AutoIt 3.3.10.0, un nouvel opérateur vient d'être rajouté à la longue liste des opérateurs disponibles.
Celui-ci s'appelle Opérateur Ternaire ou autrement dit Affectation Conditionnelle.
(Expr1) ? (Expr2) : (Expr3) => Opérateur Ternaire
En étudiant le code de certains Includes, ou celui d'autres langage, vous êtes très certainement déjà tombé sur une syntaxe semblable à celle-ci:
Return ($iNum1 > $iNum2) ? $iNum1 : $iNum2
ou encore (en php)
$eleve_admis = ($moyenne >= 10) ? true : false;
Ces expressions sont des opérateurs ternaire (ou affectation conditionnelle) et correspondent à une syntaxe plus classique telle que celles-ci :
If $iNum1 > $iNum2 Then
Return $iNum1
Else
Return $iNum2
EndIf
ou encore (en php)
//L'élève est admis si sa moyenne est >= à 10
if ($moyenne >= 10) {
$eleve_admis = true;
} else {
$eleve_admis = false;
}
Définition et Explications
L'expression (Expr1) ? (Expr2) : (Expr3) signifie donc : Si (Expr1) est vrai, on renvoi (Expr2) Si (Expr1) est fausse, on renvoi (Expr3)
Le ? teste si l'expression (Expr1) est vrai ou fausse. Si elle est vrai, le code retourne la valeur suivant le ?, si elle est fausse, le code retourne ce qui se trouve après le :.
L'écriture simplifiée introduite dans php 5.3 n'est pas disponible dans la version actuelle d'AutoIt : (Expr1) = (Expr2) ?: (Expr3)
Exemple
L'utilisation d'opérateur ternaire permet de réduire à une seule ligne, un code de 5 lignes basé sur une suite de condition IF tel que celui-ci :
If _IsChecked($Control1) Then
$Chk1 = True
Else
$Chk1 = False
EndIf
If _IsChecked($Control2) Then
$Chk2 = True
Else
$Chk2 = False
EndIf
If _IsChecked($Control3) Then
$Chk3 = True
Else
$Chk3 = False
EndIf
pourra être réduit à ceci :
$Chk1 = _IsChecked($Control1) ? True : False
$Chk2 = _IsChecked($Control2) ? True : False
$Chk3 = _IsChecked($Control3) ? True : False
Pour aller plus loin
Sachez qu'il est possible d'imbriquer les expressions ternaires (façon "poupée russe"). Ceci-dit vous devez garder à l'esprit que la lisibilité de votre code risque de devenir de plus en plus complexe si vous en imbriquez trop.
Version dévelloppée :
; Ecriture développée
If $Expr1 Then
If $Expr2 Then
MsgBox(0, "", "Résultat 1")
Else
MsgBox(0, "", "Résultat 2")
EndIf
Else
If $Expr3 Then
MsgBox(0, "", "Résultat 3")
Else
MsgBox(0, "", "Résultat 4")
EndIf
EndIf
; Ecriture simple
MsgBox(0, "", $Expr1 ? ($Expr2 ? "Résultat 1" : "Résultat 2") : ($Expr3 ? "Résultat 3" : "Résultat 4" ))
Que vous pouvez indentez comme ceci :
MsgBox(0, "", $Expr1 _
? ($Expr2 ? "Résultat 1" : "Résultat 2") _
: ($Expr3 ? "Résultat 3" : "Résultat 4"))
Merci à zeus pour son tutoriel sur phpfrance.com ainsi qu'aux participants.
Sources : http://forum.phpfrance.com/faq-tutoriels/expr1-expr2-expr3-operateur-ternaire-t14111.html