Les opérateurs conditionnels dont nous parlons ici ne sont pas les structures conditionnelles comme les if-else. Il s’agit de l’opérateur ternaire et de l’opérateur de fusion de null.
Deux opérateurs conditionnels
Dart propose deux opérateurs conditionnels concis qui permettent de remplacer les longs blocs if-else : on réalise le test conditionnel, l’affectation ou le retour de valeur sur une seule ligne.
- Opérateur ternaire conditionnel :
condition ? expr1 : expr2 - Opérateur de fusion de null :
expr1 ?? expr2
L’opérateur ternaire condition ? expr1 : expr2
Syntaxe
Condition booléenne ? Expression si vraie : Expression si fausse
Si le résultat de condition vaut true, l’opérateur renvoie expr1 ; s’il vaut false, il renvoie expr2.
Cette condition renvoie une valeur booléenne, on utilise ce booléen pour choisir une des deux valeurs à affecter ou à retourner.
Exemple :
void main() {
bool isRain = true;
// Affectation avec expression ternaire
var result = isRain ? 'Il pleut' : 'Il ne pleut pas';
print(result); // Il pleut
isRain = false;
result = isRain ? 'Il pleut' : 'Il ne pleut pas';
print(result); // Il ne pleut pas
}Langage du code : Dart (dart)
Résultat d’exécution
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Il pleut
Il ne pleut pasLangage du code : CSS (css)
Si vous avez déjà appris les if-else, voici l’équivalent écrit avec des blocs classiques :
void main() {
bool isRain = true;
String result;
if (isRain) {
result = 'Il pleut';
} else {
result = 'Il ne pleut pas';
}
print(result);//Il pleut
}Langage du code : Dart (dart)
Opérateur de fusion de null
Permet de vérifier si une variable vaut null et de définir rapidement une valeur par défaut.
Syntaxe expr1 ?? expr2
Expression nullable ?? Valeur par défaut
- Si
expr1n’est pas null, l’opérateur renvoie directementexpr1; - Si
expr1est égal ànull, il renvoieexpr2
Exemple officiel
void main() {
// Le paramètre est une chaîne nullable String?
String playerName(String? name) => name ?? 'Guest';
print(playerName("Tom")); // Tom
print(playerName(null)); // Guest
}Langage du code : JavaScript (javascript)
Nous définissons une fonction playerName qui renvoie le nom du joueur ; son paramètre est une chaîne nullable. L’opérateur ?? permet de lui attribuer une valeur initiale : si le nom transmis est null, la valeur par défaut sera Guest.
Complément
Ici, playerName est une fonction fléchée, une syntaxe abrégée pour les fonctions. Nous verrons cela plus tard, elle est équivalente au code ci-dessous :
String playerName(String? name) {
return name ?? 'Guest';
}Langage du code : Dart (dart)
Comparaison des écritures équivalentes
Version avec opérateur ternaire
String playerName(String? name) => name != null ? name : 'Guest';Langage du code : JavaScript (javascript)
Version complète avec if-else
String playerName(String? name) {
if (name != null) {
return name;
} else {
return 'Guest';
}
}Langage du code : JavaScript (javascript)