Sobes.tech
Junior

Ce este siguranța nulă (null safety) în Dart?

sobes.tech AI

Răspuns de la AI

Securitatea nul este un sistem în Dart care ajută la prevenirea erorilor în timpul execuției legate de dereferențierea null. Compilatorul analizează codul și determină dacă o variabilă poate conține o valoare null. Dacă o variabilă este declarată ca nepermisă pentru null, compilatorul garantează că nu i se va atribui niciodată null.

Aspecte principale ale securității null:

  • Tip implicit non-null: În mod implicit, tipurile nu permit null (non-nullable).
    // int nu poate fi null
    int count = 0;
    
  • Tip permisiv pentru null: Pentru a indica explicit că o variabilă poate fi null, se folosește semnul întrebării ?:
    // String? poate fi null
    String? name;
    
  • Operatorul ! (afirmarea non-null): Se folosește pentru a afirma că o expresie permisivă pentru null nu este null. Trebuie folosit cu precauție, deoarece dacă este null, aruncă o excepție.
    String? nullableName = 'Flutter';
    // Folosim !, știind că nullableName nu este null în acest context
    print(nullableName!.length);
    
  • Operatorul ? (operatori null-aware): Se folosește pentru acces sigur la membri sau apeluri de metode pe expresii permisive pentru null.
    • ?. (acces sigur pentru null):
      String? nullableString;
      // Dacă nullableString nu este null, se va apela length, altfel rezultatul va fi null
      int? length = nullableString?.length;
      
    • ?? (dacă null):
      String? serverName;
      // Dacă serverName nu este null, se folosește valoarea sa, altfel 'Guest'
      String displayName = serverName ?? 'Guest';
      
    • ??= (dacă null, atribuie):
      String? cache;
      // Dacă cache este null, i se atribuie 'Loading...'
      cache ??= 'Loading...';
      
  • Analiza fluxului: Compilatorul Dart analizează codul și determină când o variabilă permisivă pentru null nu este null într-o anumită parte a codului, permițându-i să fie utilizată ca non-null.
    String? greeting = getGreeting();
    // Compilatorul știe că greeting nu este null după această verificare
    if (greeting != null) {
      print(greeting.toUpperCase()); // Poate fi utilizat în siguranță toUpperCase()
    }
    

Avantajele securității null:

  • Reducerea erorilor: Previne NullReferenceException (sau altele similare) în timpul execuției.
  • Citire mai bună: Indică explicit dacă o variabilă poate fi null.
  • Performanță crescută: Compilatorul poate face optimizări știind care variabile nu sunt garantat null.

Securitatea null a fost introdusă în Dart 2.12.