Expressions conditionnelles Dart

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.

  1. Opérateur ternaire conditionnel : condition ? expr1 : expr2
  2. 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 expr1 n’est pas null, l’opérateur renvoie directement expr1 ;
  • Si expr1 est égal à null, il renvoie expr2

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)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *