EMZETT.
Login

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();                         // NullPointerException
const 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 0
let wert: Option<i32> = None;
match wert {
    Some(x) => println!("{x}"),
    None => println!("kein Wert"),
}

Strategien gegen Null-Fehler

StrategieSprachen
Typ ohne Null als Standard, ? für OptionalesKotlin, Swift, Dart, TypeScript (strict)
Option/Maybe-Typ, match erzwingt PrüfungRust, Haskell, OCaml, F#, Scala
Optional-ContainerJava 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