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';
StringMuss immer Text enthalten.
String?Darf Text enthalten oder null sein.
nullSteht 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