Kapitel 63. Optional ist eine gesetzesbrechende Monade, aber ein guter Typ
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
Nicolai Parlog
In den meisten Programmiersprachen sind leere oder nicht leere Typen wohlbehaltene Monaden. (Ja, ich habe das M-Wort benutzt - keine Sorge, keine Mathematik.) Das bedeutet, dass ihre Mechanik eine Reihe von Definitionen erfüllt und einer Reihe von Gesetzen folgt, die eine sichere (De-)Komposition von Berechnungen garantieren.
Optional
Die Methoden von erfüllen diese Definitionen , brechen aber die Gesetze. Nicht ohne Folgen...
Monaden-Definition
Du brauchst drei Dinge, um eine Monade zu definieren - in Optional
's terms:
-
Der Typ
Optional<T>
selbst -
Die Methode
ofNullable(T)
, die einen WertT
in eineOptional<T>
-
Die Methode
flatMap(Function<T, Optional<U>>
), die die angegebene Funktion auf den Wert anwendet, der von derOptional
umschlossen wird, auf der sie aufgerufen wird
Es gibt eine alternative Definition, die map
anstelle von flatMap
verwendet, aber sie ist zu lang, um hier Platz zu finden.
Monadengesetze
Jetzt wird es interessant - eine Monade muss drei Gesetze erfüllen, um zu den coolen Kids zu gehören. In Optional
's terms:
-
Für ein
Function<T, Optional<U>> f
und einen Wertv
mussf.apply(v)
gleichOptional.ofNullable(v).flatMap(f)
sein. Diese ...
Get 97 Dinge, die jeder Java-Programmierer wissen sollte now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.