Nullable (deutsch etwa nullbar) bezeichnet einen Datentyp, der zusätzlich zu seinen normalen Werten auch null (bzw. nil oder None) annehmen kann. Das ist praktisch für Werte, die noch nicht gesetzt sind – etwa eine Telefonnummer, die optional ist – aber es ist auch eine der häufigsten Fehlerquellen in der Programmierung.
NullReferenceException und Co.
Wer auf einen null-Wert zugreift, löst in Java die NullPointerException aus, in C# die NullReferenceException. Genau diese Fehlerklasse will das nullable-Konzept entschärfen: Statt stillschweigend null zuzulassen, zwingen moderne Sprachen den Entwickler, den Fall explizit zu behandeln – siehe auch Exception.
Nullable in verschiedenen Sprachen
// C#: int? kann zusätzlich null enthalten
int? alter = null;
if (alter.HasValue) {
Console.WriteLine(alter.Value);
} else {
Console.WriteLine("Alter unbekannt");
}
Kotlin unterscheidet den Typ String (darf nie null sein) von String? (darf null sein) – der Compiler prüft das bereits zur Übersetzungszeit:
// Kotlin
var name: String? = null
println(name?.length) // Sicherer Zugriff: null, wenn name null ist
TypeScript kennt mit strictNullChecks eine ähnliche Absicherung, Swift verwendet Optionals mit ? und !, und Java bietet seit Version 8 die Klasse Optional.
Vorteile und Regeln
- Weniger Laufzeitfehler: Viele Null-Fehler werden schon beim Kompilieren entdeckt statt erst im Betrieb.
- Klare Absicht: Ein nullable Typ dokumentiert, dass ein Wert fehlen darf – das macht Funktionen und ihre Rückgabewerte ehrlicher.
- Null-Propagation: Operatoren wie
?.(Kotlin, C#, TypeScript) oder??(Fallback-Wert) verkürzen die Abfragen auf elegante Weise. - Auch Booleans und Ganzzahlen werden als nullable deklariert, wenn ein dritter Zustand („unbekannt“) nötig ist.
Verwandte Konzepte
Nullable hängt eng mit dem Typsystem und der Typsicherheit der Sprache zusammen: Je strikter der Umgang mit null, desto robuster das Programm. Ein primitiver Datentyp wie int ist in vielen Sprachen von Natur aus nicht nullable – erst die Wrapper-Klasse (Integer, int?) macht ihn dazu.
Verwandte Grundlagen: Datentyp, Null, Typsystem, Objekt. Sprachreferenzen: C#-Befehle, Kotlin-Befehle, TypeScript-Befehle, Swift-Befehle, Java-Befehle.