Die Maybe-Monade (in vielen Sprachen Option genannt) kapselt den Kontext „ein Wert kann fehlen“. Statt mit Null-Referenzen oder Sonderwerten zu arbeiten, wird das Fehlen explizit im Typ sichtbar und muss vom Programmierer behandelt werden.

Definition

In Haskell ist Maybe eine Summe aus zwei Konstruktoren:

data Maybe a = Nothing | Just a

Ein Wert vom Typ Maybe Int ist also entweder Nothing (kein Wert) oder Just 5 (Wert 5). Der Typ sagt damit schon aus: Hier kann nichts stehen — und die Verarbeitung muss beide Fälle abdecken.

Bind: Der Fehlerfall pflanzt sich fort

Das Herzstück der Monade ist der bind-Operator. Er wendet die nächste Funktion nur auf einen vorhandenen Wert an; bei Nothing wird die Funktion übersprungen und Nothing direkt weitergereicht:

Just x  >>= f = f x
Nothing >>= f = Nothing

Damit können beliebig lange Verarbeitungsketten geschrieben werden, ohne jeden Schritt einzeln auf den Fehlerfall zu prüfen — ein einzelnes Nothing bricht die gesamte Kette ab.

Typische Anwendungen

  • Sicheres Nachschlagen in einer Map: Map.lookup liefert Maybe statt einer Exception.
  • Teilfunktionen total machen: Die erste Element einer leeren Liste, die Division durch null oder das Parsen einer Zeichenkette liefern Nothing statt abzustürzen.
  • Validierung optionaler Eingaben, etwa Formularfelder oder Konfigurationswerte.

Die Idee dahinter ist die totale Funktion: Statt zur Laufzeit zu scheitern, wird das Fehlen als Datenwert modelliert — eine Grundlage für reine Funktionen und Funktionskomposition.

Pendants in anderen Sprachen

Das Konzept ist weit verbreitet:

  • Rust: Option<T> mit Some und None, verketten mit and_then.
  • Java: Optional<T> mit map und flatMap.
  • Kotlin: null-basierte Sicherheit plus ?. -Operator und Result für Fehler.
  • F#: Option<'T> mit Some und None.
  • Swift: Optional mit nil, verketten mit flatMap.

In Rust-Befehlen und Kotlin-Befehlen finden sich die typischen Operationen im Praxiseinsatz.

Maybe im Vergleich zu Null

Klassische Null-Referenzen sind unsichtbar: Jeder Aufruf kann scheitern, ohne dass der Typ es verrät. Maybe/Option machen das Fehlen dagegen zur Typinformation. Der Preis ist ausdrückliche Behandlung — Pattern Matching oder flatMap-Ketten statt stiller Dereferenzierung. Das Typsystem erinnert den Entwickler an jeden Fall, in dem ein Wert fehlen kann.

Verwandte Grundlagen: Monade, Either-Monade, Funktionale Programmierung, Typsystem.