Variablen & Typen Weiter zur Hello-Aufgabe

Lektion 04 - Null Safety

Null-Werte sicher behandeln

Null Safety ist eines der wichtigsten Dart-Themen. Es verhindert, dass dein Programm aus Versehen mit einem Wert arbeitet, der gar nicht vorhanden ist.

1. Was bedeutet null?

null bedeutet: kein Wert vorhanden. Das ist nicht dasselbe wie ein leerer Text. Ein leerer Text ist ein vorhandener String mit Laenge 0.

String leererText = '';

// kein String vorhanden:
String? vielleichtName = null;

2. Nicht nullable als Standard

In Dart darf eine normale Variable nicht automatisch null sein. Das macht Programme sicherer.

String name = 'Welt';

// Fehler:
name = null;

Ohne Fragezeichen muss immer ein echter Wert vorhanden sein.

3. Das Fragezeichen beim Typ

Wenn eine Variable auch null sein darf, schreibst du ein Fragezeichen an den Typ. Dadurch zwingt Dart dich, vor der Nutzung nachzudenken.

String? eingabe = null;

eingabe = 'Hallo';
String

Muss immer Text enthalten.

String?

Darf Text enthalten oder null sein.

null

Steht fuer keinen vorhandenen Wert.

4. Null pruefen, bevor du arbeitest

Bei nullable Werten musst du pruefen, ob ein Wert vorhanden ist. Erst danach kannst du sicher damit arbeiten.

String? name = null;

if (name != null) {
  print('Hallo $name!');
} else {
  print('Hallo!');
}

Nach name != null weiss Dart im if-Block, dass name wirklich ein String ist.

5. Wichtige Operatoren

OperatorBedeutung
?Typ darf null sein, zum Beispiel String?
??Ersatzwert nutzen, wenn links null ist
?.Eigenschaft nur lesen, wenn der Wert nicht null ist
!Erzwingt: Dieser Wert ist nicht null
String? name = null;

print(name ?? 'Gast');
print(name?.length);

Das Ausrufezeichen ! solltest du am Anfang selten nutzen. Es kann Fehler verursachen, wenn der Wert doch null ist.

6. Verbindung zu readLineSync

Spaeter in greeter.dart liest du Eingaben aus der Konsole. Diese Eingabe kann in Dart nullable sein, weil theoretisch keine Eingabe zurueckkommen kann.

import 'dart:io';

void main() {
  String? eingabe = stdin.readLineSync();

  if (eingabe == null || eingabe.trim().isEmpty) {
    print('Keine gueltige Eingabe.');
    return;
  }

  print('Hallo $eingabe!');
}

7. Mini-Merksatz

Ohne Fragezeichen braucht eine Variable immer einen Wert. Mit Fragezeichen darf sie null sein, muss dann aber sicher geprueft werden.

Weiter zur Hello-Aufgabe