Null (kein Wert)
Kurz: Null (je nach Sprache null, nil, None, undefined) steht für „kein Wert“ oder „kein Objekt“. Wer darauf zugreift, als wäre ein Wert da, löst einen Fehler aus – den berüchtigten NullPointerException.
Genauer: Der Erfinder des Null-Zeigers, Tony Hoare, nannte ihn seinen „Milliarden-Dollar-Fehler“, weil er unzählige Abstürze verursacht hat. Moderne Sprachen entschärfen das Problem durch Typsysteme: Sie unterscheiden Typen, die Null erlauben, von solchen, die es nicht tun.
Im Detail
String name = null;
name.length(); // NullPointerExceptionconst benutzer = null;
console.log(benutzer?.name ?? "unbekannt"); // optional chaining + Standardwert: "unbekannt"var a: String = "Text" // darf nie null sein
var b: String? = null // ? erlaubt null
println(b?.length ?: 0) // sicherer Aufruf, Standardwert 0let wert: Option<i32> = None;
match wert {
Some(x) => println!("{x}"),
None => println!("kein Wert"),
}Strategien gegen Null-Fehler
| Strategie | Sprachen |
|---|---|
Typ ohne Null als Standard, ? für Optionales | Kotlin, Swift, Dart, TypeScript (strict) |
Option/Maybe-Typ, match erzwingt Prüfung | Rust, Haskell, OCaml, F#, Scala |
| Optional-Container | Java Optional, C++ std::optional |
Sicherer Zugriff (?., ??) | JavaScript, C#, Kotlin, Swift |
| Null-Objekt-Muster (neutrale Standardobjekte) | beliebig |
Zusätzliche Fallen: Null in Datenbanken (SQL NULL ist „unbekannt“ und verhält sich bei Vergleichen anders: NULL = NULL ist nicht wahr, man prüft mit IS NULL), leere Strings und 0 sind nicht dasselbe wie Null. Fehlerbehandlung allgemein: Exceptions.
Siehe auch: Exceptions, Zeiger, Referenztypen, Typinferenz