Sobes.tech
Junior

Mi az a null biztonság (null safety) Dartben?

sobes.tech MI

Válasz az MI-től

A null biztonság egy rendszer Dartban, amely segít megelőzni a null érték dereferálásával kapcsolatos futásidejű hibákat. A fordító elemzi a kódot, és meghatározza, hogy egy változó tartalmazhat-e null értéket. Ha egy változót úgy deklarálnak, hogy nem engedélyezi a null-t, a fordító garantálja, hogy soha nem fog null értéket kapni.

A null biztonság főbb aspektusai:

  • Implicit nem null típus: Alapértelmezés szerint a típusok nem engedélyezik a null-t (non-nullable).
    // int nem lehet null
    int count = 0;
    
  • Null-t engedélyező típus: Az explicit jelzéshez, hogy egy változó null lehet, a kérdőjel ? kerül:
    // String? null lehet
    String? name;
    
  • ! operátor (nem null megerősítése): Használható arra, hogy megerősítse, hogy egy null-t engedélyező kifejezés nem null. Óvatosan kell használni, mert null esetén kivételt dob.
    String? nullableName = 'Flutter';
    // Használjuk !, tudva, hogy nullableName nem null ebben a kontextusban
    print(nullableName!.length);
    
  • ? operátor (null-aware operátorok): Biztonságos hozzáférést tesz lehetővé null-t engedélyező kifejezések tagjaihoz vagy metódushívásaihoz.
    • ?. (null-aware hozzáférés):
      String? nullableString;
      // Ha nullableString nem null, meghívódik a length, különben null lesz az eredmény
      int? length = nullableString?.length;
      
    • ?? (ha null):
      String? serverName;
      // Ha serverName nem null, az értékét használja, különben 'Guest'
      String displayName = serverName ?? 'Guest';
      
    • ??= (ha null, hozzárendelés):
      String? cache;
      // Ha cache null, 'Loading...' értéket kap
      cache ??= 'Loading...';
      
  • Áramlás elemzés: A Dart fordító elemzi a kódot, és meghatározza, mikor nem null egy null-t engedélyező változó egy adott kódrészben, lehetővé téve, hogy nem null-ként használjuk.
    String? greeting = getGreeting();
    // A fordító tudja, hogy greeting nem null a vizsgálat után
    if (greeting != null) {
      print(greeting.toUpperCase()); // Biztonságosan használható a toUpperCase()
    }
    

A null biztonság előnyei:

  • Hibák csökkentése: Megelőzi a NullReferenceException-t (vagy hasonlókat) futásidőben.
  • Olvashatóság javítása: Egyértelműen jelzi, hogy egy változó null lehet-e.
  • Teljesítmény növelése: A fordító optimalizálásokat végezhet, tudva, mely változók garantáltan nem null-ok.

A null biztonság a Dart 2.12 verziójában került bevezetésre.