Sobes.tech
Junior

Šta je null sigurnost (null safety) u Dart-u?

sobes.tech АИ

Одговор од АИ

Nultiva sigurnost je sistem u Dart-u koji pomaže u sprečavanju grešaka tokom izvršavanja povezanim sa dereferenciranjem null. Kompajler analizira kod i određuje da li promenljiva može sadržavati null vrednost. Ako je promenljiva deklarisana kao ne dopuštajuća null, kompajler garantuje da joj nikada neće biti dodeljena null vrednost.

Glavni aspekti nulte sigurnosti:

  • Nejasan tip bez null: Podrazumevano, tipovi ne dopuštaju null (non-nullable).
    // int ne može biti null
    int count = 0;
    
  • Tip koji dopušta null: Za eksplicitno označavanje da promenljiva može biti null, koristi se znak ?:
    // String? može biti null
    String? name;
    
  • Operator ! (non-null assertion): Koristi se za potvrdu da izraz koji dopušta null nije null. Treba ga koristiti oprezno, jer u slučaju null baca izuzetak.
    String? nullableName = 'Flutter';
    // Koristimo !, znajući da nullableName nije null u ovom kontekstu
    print(nullableName!.length);
    
  • Operator ? (null-aware operatori): Koristi se za siguran pristup članovima ili pozivima metoda na izrazima koji dopuštaju null.
    • ?. (null-aware pristup):
      String? nullableString;
      // Ako nullableString nije null, biće pozvan length, inače će rezultat biti null
      int? length = nullableString?.length;
      
    • ?? (ako null):
      String? serverName;
      // Ako serverName nije null, koristi se njegova vrednost, inače 'Guest'
      String displayName = serverName ?? 'Guest';
      
    • ??= (ako null, dodeljivanje):
      String? cache;
      // Ako cache je null, dodeljuje se 'Loading...'
      cache ??= 'Loading...';
      
  • Analiza toka (Flow Analysis): Kompajler Dart analizira kod i određuje kada promenljiva koja dopušta null garantovano nije null u određenom delu koda, omogućavajući njeno korišćenje kao ne dopuštajuće null.
    String? greeting = getGreeting();
    // Kompajler zna da greeting nije null nakon ove provere
    if (greeting != null) {
      print(greeting.toUpperCase()); // Može sigurno koristiti toUpperCase()
    }
    

Prednosti nulte sigurnosti:

  • Smanjenje grešaka: Sprečava NullReferenceException (ili slične) tokom izvršavanja.
  • Poboljšana čitljivost: Izričito ukazuje da li promenljiva može biti null.
  • Povećana performansa: Kompajler može vršiti optimizacije znajući koje promenljive su garantovano ne null.

Nultiva sigurnost uvedena je u Dart 2.12.