Menu
Coddy logo textTech

Opérateurs sensibles à null

Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy. Leçon 27 sur 110.

Au-delà de ?. et !, Dart propose des opérateurs supplémentaires qui rendent le travail avec des valeurs nullables plus concis. Ces opérateurs de gestion de la nullité vous aident à écrire un code plus propre lorsque vous manipulez des valeurs potentiellement nulles.

L'opérateur de coalescence nulle ?? renvoie la valeur de gauche si elle n'est pas nulle, sinon il renvoie la valeur de droite :

String? nickname;
String displayName = nickname ?? 'Guest';
print(displayName);  // Guest

nickname = 'Alex';
displayName = nickname ?? 'Guest';
print(displayName);  // Alex

L'opérateur d'affectation null-aware ??= n'assigne une valeur que si la variable est actuellement nulle :

String? username;
username ??= 'Anonymous';
print(username);  // Anonymous

username ??= 'NewName';
print(username);  // Toujours Anonymous (n'était pas nulle)

Vous pouvez enchaîner l'opérateur d'accès conditionnel (null-aware) ?. pour les propriétés imbriquées :

String? city = user?.address?.city;  // Sûr même si user ou address est null

Ces opérateurs se combinent bien ensemble. Par exemple, vous pourriez accéder à une propriété nullable et fournir une valeur par défaut :

String greeting = user?.name ?? 'Stranger';
// Si user est null OU si user.name est null, utiliser 'Stranger'

L'utilisation de ces opérateurs permet de garder votre code lisible tout en assurant la sécurité vis-à-vis des valeurs nulles dans l'ensemble de votre programme.

challenge icon

Défi

Facile

Construisons un système d'inscription des invités qui montre comment les opérateurs tenant compte de la nullité peuvent rendre votre code plus clair lors de la gestion d'informations facultatives.

Vous organiserez votre code en deux fichiers :

  • guest.dart : définissez une classe Guest qui représente une personne participant à un événement. Certains invités fournissent tous leurs détails, tandis que d'autres ne donnent que les informations de base. Votre classe doit comporter :
    • Un String name non nullable : chaque invité doit avoir un nom
    • Un String? email nullable : tout le monde ne fournit pas d'adresse e-mail
    • Un String? dietaryPreference nullable : certains invités ne précisent pas leurs besoins alimentaires
    • Un constructeur qui prend name comme paramètre obligatoire
    • Une méthode getDisplayEmail() qui renvoie l'adresse e-mail si elle est disponible, ou 'No email provided' à l'aide de l'opérateur ??
    • Une méthode assignDefaultDiet() qui définit dietaryPreference sur 'Standard' uniquement si sa valeur actuelle est null, à l'aide de l'opérateur ??=
    • Une méthode getEmailDomain() qui renvoie la longueur de l'adresse e-mail à l'aide de ?., ou null si aucune adresse e-mail n'existe
    • Une méthode printBadge() qui affiche les informations du badge de l'invité
  • main.dart : importez votre classe d'invité et inscrivez trois invités avec différents niveaux d'information :
    • Créez un invité nommé 'Alice', définissez son adresse e-mail sur 'alice@company.com' et sa préférence alimentaire sur 'Vegetarian'
    • Créez un invité nommé 'Bob', définissez uniquement son adresse e-mail sur 'bob@email.org' (laissez sa préférence alimentaire à null)
    • Créez un invité nommé 'Charlie' (laissez son adresse e-mail et sa préférence alimentaire à null)
    • Appelez assignDefaultDiet() sur les trois invités
    • Pour chaque invité dans l'ordre, appelez printBadge(), puis affichez Email length: [result] à l'aide de getEmailDomain()

La méthode printBadge() doit afficher les informations dans ce format :

=== Guest Badge ===
Name: [name]
Email: [getDisplayEmail()]
Diet: [dietaryPreference or "Not specified"]

Remarquez que la préférence alimentaire d'Alice reste 'Vegetarian', car ??= n'attribue une valeur que lorsque la valeur est null, tandis que Bob et Charlie reçoivent la préférence alimentaire par défaut 'Standard'.

Sortie attendue :

=== Guest Badge ===
Name: Alice
Email: alice@company.com
Diet: Vegetarian
Email length: 17
=== Guest Badge ===
Name: Bob
Email: bob@email.org
Diet: Standard
Email length: 13
=== Guest Badge ===
Name: Charlie
Email: No email provided
Diet: Standard
Email length: null

Essayez vous-même

import 'guest.dart';

void main() {
  // TODO: Créer un invité nommé 'Alice'
  // Définir son email à 'alice@company.com'
  // Définir sa préférence alimentaire à 'Vegetarian'

  // TODO: Créer un invité nommé 'Bob'
  // Définir uniquement son email à 'bob@email.org'
  // Laisser la préférence alimentaire à null

  // TODO: Créer un invité nommé 'Charlie'
  // Laisser l'email et la préférence alimentaire à null

  // TODO: Appeler assignDefaultDiet() sur les trois invités

  // TODO: Pour chaque invité dans l'ordre (Alice, Bob, Charlie) :
  // - Appeler printBadge()
  // - Afficher 'Email length: [result]' en utilisant getEmailDomain()
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur Dart en ligne