Sobes.tech
Junior

Kas yra null saugumas (null safety) Dart'e?

sobes.tech AI

Atsakymas iš AI

Null saugumas yra sistema Dart, kuri padeda išvengti klaidų vykdymo metu, susijusių su null nuorodomis. Kompiliatorius analizuoja kodą ir nustato, ar kintamasis gali saugoti null reikšmę. Jei kintamasis deklaruotas kaip neleidžiantis null, jis niekada nebus jam priskirta null reikšmė.

Pagrindiniai nulio saugumo aspektai:

  • Neaiškus null neleidžiantis tipas: Pagal numatytuosius nustatymus tipai neleidžia null (non-nullable).
    // int negali būti null
    int count = 0;
    
  • Null leidžiantis tipas: Norint aiškiai nurodyti, kad kintamasis gali būti null, naudojamas ženklas ?:
    // String? gali būti null
    String? name;
    
  • ! operatorius (null neigimo patvirtinimas): Naudojamas patvirtinti, kad null leidžiantis išraiška nėra null. Reikia naudoti atsargiai, nes null atveju išmetama išimtis.
    String? nullableName = 'Flutter';
    // Naudojame !, žinodami, kad nullableName nėra null
    print(nullableName!.length);
    
  • ? operatorius (null-aware operatoriai): Naudojamas saugiam prieigai prie narių arba metodų išraiškose, leidžiančiose null.
    • ?. (null-aware prieiga):
      String? nullableString;
      // Jei nullableString nėra null, bus iškviesta length, kitaip rezultatas bus null
      int? length = nullableString?.length;
      
    • ?? (jei null):
      String? serverName;
      // Jei serverName nėra null, naudojama jo reikšmė, kitaip 'Guest'
      String displayName = serverName ?? 'Guest';
      
    • ??= (jei null, priskirti):
      String? cache;
      // Jei cache yra null, jam priskiriama 'Loading...'
      cache ??= 'Loading...';
      
  • Srauto analizė (Flow Analysis): Dart kompiliatorius analizuoja kodą ir nustato, kada null leidžiantis kintamasis garantuotai nėra null tam tikroje kodo dalyje, leidžiant jį naudoti kaip neleidžiantį null.
    String? greeting = getGreeting();
    // Kompiliatorius žino, kad greeting nėra null po šios patikros
    if (greeting != null) {
      print(greeting.toUpperCase()); // Saugu naudoti toUpperCase()
    }
    

Nulio saugumo privalumai:

  • Klaidų sumažinimas: Užkerta kelią NullReferenceException (ar panašių) vykdymo metu.
  • Skaitymo gerinimas: Aiškiai nurodo, ar kintamasis gali būti null.
  • Veikimo našumo didinimas: Kompiliatorius gali atlikti optimizacijas, žinodamas, kurios kintamosios garantuotai nėra null.

Null saugumas buvo įvestas Dart 2.12 versijoje.