Sobes.tech
Junior

Was ist Null Safety in Dart?

sobes.tech KI

Antwort von AI

Null-Sicherheit ist ein System in Dart, das hilft, Laufzeitfehler im Zusammenhang mit Null-Dereferenzierungen zu vermeiden. Der Compiler analysiert den Code und bestimmt, ob eine Variable einen Null-Wert enthalten kann. Wenn eine Variable als nicht null erlaubt deklariert ist, garantiert der Compiler, dass ihr niemals null zugewiesen wird.

Hauptaspekte der Null-Sicherheit:

  • Impliziter nicht-nullbarer Typ: Standardmäßig erlauben Typen kein null (nicht nullable).
    // int kann nicht null sein
    int count = 0;
    
  • Null-erlaubter Typ: Um explizit anzugeben, dass eine Variable null sein kann, wird das Fragezeichen ? verwendet:
    // String? kann null sein
    String? name;
    
  • Operator ! (Nicht-Null-Aussage): Wird verwendet, um zu bestätigen, dass ein null-erlaubter Ausdruck nicht null ist. Sollte vorsichtig verwendet werden, da bei null eine Ausnahme ausgelöst wird.
    String? nullableName = 'Flutter';
    // Wir verwenden !, in dem Wissen, dass nullableName in diesem Kontext nicht null ist
    print(nullableName!.length);
    
  • Operator ? (Null-sichere Operatoren): Wird verwendet, um sicher auf Mitglieder zuzugreifen oder Methoden bei null-erlaubten Ausdrücken aufzurufen.
    • ?. (Null-sicherer Zugriff):
      String? nullableString;
      // Wenn nullableString nicht null ist, wird length aufgerufen, sonst ist das Ergebnis null
      int? length = nullableString?.length;
      
    • ?? (falls null):
      String? serverName;
      // Wenn serverName nicht null ist, wird sein Wert verwendet, sonst 'Guest'
      String displayName = serverName ?? 'Guest';
      
    • ??= (falls null zuweisen):
      String? cache;
      // Wenn cache null ist, wird 'Loading...' zugewiesen
      cache ??= 'Loading...';
      
  • Flussanalyse: Der Dart-Compiler analysiert den Code und bestimmt, wann eine null-erlaubte Variable garantiert nicht null ist, was die Verwendung als nicht nullbar erlaubt.
    String? greeting = getGreeting();
    // Der Compiler weiß, dass greeting nach dieser Überprüfung nicht null ist
    if (greeting != null) {
      print(greeting.toUpperCase()); // Sicheres Verwenden von toUpperCase()
    }
    

Vorteile der Null-Sicherheit:

  • Fehlerreduktion: Verhindert NullReferenceException (oder ähnliche) zur Laufzeit.
  • Verbesserte Lesbarkeit: Gibt explizit an, ob eine Variable null sein kann.
  • Erhöhte Leistung: Der Compiler kann Optimierungen vornehmen, wenn er weiß, welche Variablen garantiert nicht null sind.

Die Null-Sicherheit wurde in Dart 2.12 eingeführt.