Sobes.tech
Junior

Kas ir null drošība (null safety) Dartā?

sobes.tech AI

Atbilde no AI

Nulles drošība ir sistēma Dart, kas palīdz novērst izpildes laikā saistītas kļūdas, kas saistītas ar null atsaucēm. Kompilators analizē kodu un nosaka, vai mainīgais var saglabāt null vērtību. Ja mainīgais ir deklarēts kā neļaujot null, tas garantē, ka tam nekad netiks piešķirta null vērtība.

Galvenie nulles drošības aspekti:

  • Nepārprotams null neļaujams tips: Noklusējuma tipi neļauj null (non-nullable).
    // int nevar būt null
    int count = 0;
    
  • Null atļauts tips: Lai skaidri norādītu, ka mainīgais var būt null, tiek izmantots zīme ?:
    // String? var būt null
    String? name;
    
  • ! operators (null neapstrīdēšana): Tiek izmantots, lai apstiprinātu, ka null atļauts izteikums nav null. To jālieto ar piesardzību, jo null gadījumā tiek izsviesta izņēmums.
    String? nullableName = 'Flutter';
    // Izmantojam !, zinot, ka nullableName nav null
    print(nullableName!.length);
    
  • ? operators (null-aware operators): Tiek izmantots drošai piekļuvei pie locekļiem vai metožu izsaukumiem izteiksmēs, kas atļauj null.
    • ?. (null-aware piekļuve):
      String? nullableString;
      // Ja nullableString nav null, tiks izsaukta length, citādi rezultāts būs null
      int? length = nullableString?.length;
      
    • ?? (ja null):
      String? serverName;
      // Ja serverName nav null, tiek izmantota tā vērtība, citādi 'Guest'
      String displayName = serverName ?? 'Guest';
      
    • ??= (ja null, piešķirt):
      String? cache;
      // Ja cache ir null, tam tiek piešķirts 'Loading...'
      cache ??= 'Loading...';
      
  • Plūsmas analīze (Flow Analysis): Dart kompilators analizē kodu un nosaka, kad null atļauts mainīgais garantēti nav null noteiktā koda daļā, ļaujot to izmantot kā neļaujot null.
    String? greeting = getGreeting();
    // Kompilators zina, ka greeting nav null pēc šīs pārbaudes
    if (greeting != null) {
      print(greeting.toUpperCase()); // Droši izmantot toUpperCase()
    }
    

Nulles drošības priekšrocības:

  • Kļūdu samazināšana: Novērš NullReferenceException (vai līdzīgas) izpildes laikā.
  • Lasāmības uzlabošana: Skaidri norāda, vai mainīgais var būt null.
  • Veiktspējas palielināšana: Kompilators var veikt optimizācijas, zinot, kuras mainīgās garantēti nav null.

Nulles drošība tika ieviesta Dart 2.12 versijā.