Operateur Ternaire

De Wiki AutoIt Français
Aller à : navigation, rechercher


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 :.

*** Attention ***
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