Sobes.tech
Junior

Qu'est-ce que la sécurité nulle (null safety) en Dart?

sobes.tech IA

Réponse de l'IA

La sécurité nulle est un système dans Dart qui aide à prévenir les erreurs à l'exécution liées à la déférenciation de null. Le compilateur analyse le code et détermine si une variable peut contenir une valeur null. Si une variable est déclarée comme ne permettant pas null, le compilateur garantit qu'elle ne se verra jamais attribuer null.

Principaux aspects de la sécurité nulle :

  • Type non nullable implicite : Par défaut, les types n'autorisent pas null (non nullable).
    // int ne peut pas être null
    int count = 0;
    
  • Type nullable : Pour indiquer explicitement qu'une variable peut être null, on utilise le point d'interrogation ? :
    // String? peut être null
    String? name;
    
  • Opérateur ! (affirmation non null) : Utilisé pour affirmer qu'une expression nullable n'est pas null. Doit être utilisé avec précaution, car si c'est null, une exception est levée.
    String? nullableName = 'Flutter';
    // Utilisons !, en sachant que nullableName n'est pas null dans ce contexte
    print(nullableName!.length);
    
  • Opérateur ? (opérateurs null-sécurisés) : Utilisé pour accéder en toute sécurité aux membres ou appeler des méthodes sur des expressions nullable.
    • ?. (accès null-sécurisé) :
      String? nullableString;
      // Si nullableString n'est pas null, length sera appelé, sinon le résultat sera null
      int? length = nullableString?.length;
      
    • ?? (si null) :
      String? serverName;
      // Si serverName n'est pas null, son valeur est utilisée, sinon 'Guest'
      String displayName = serverName ?? 'Guest';
      
    • ??= (si null, assigner) :
      String? cache;
      // Si cache est null, lui assigner 'Loading...'
      cache ??= 'Loading...';
      
  • Analyse de flux : Le compilateur Dart analyse le code et détermine quand une variable nullable n'est pas null dans une partie donnée du code, permettant de l'utiliser comme non nullable.
    String? greeting = getGreeting();
    // Le compilateur sait que greeting n'est pas null après cette vérification
    if (greeting != null) {
      print(greeting.toUpperCase()); // Peut utiliser en toute sécurité toUpperCase()
    }
    

Avantages de la sécurité nulle :

  • Réduction des erreurs : Empêche NullReferenceException (ou similaires) à l'exécution.
  • Meilleure lisibilité : Indique explicitement si une variable peut être null.
  • Performance accrue : Le compilateur peut effectuer des optimisations en sachant quelles variables ne sont pas null garantis.

La sécurité nulle a été introduite dans Dart 2.12.