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.

OptionalDie 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:

  1. Der Typ Optional<T> selbst

  2. Die Methode ofNullable(T), die einen Wert T in eine Optional<T>

  3. Die Methode flatMap(Function<T, Optional<U>>), die die angegebene Funktion auf den Wert anwendet, der von der Optional 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:

  1. Für ein Function<T, Optional<U>> f und einen Wert v muss f.apply(v) gleich Optional.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.