Capítulo 63. Opcional es una mónada infractora pero un buen tipo
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
Nicolai Parlog
En la mayoría de los lenguajes de programación, los tipos vacío-o-no-vacío son mónadas de buen comportamiento. (Esto significa que su mecánica cumple un par de definiciones y sigue una serie de leyes que garantizan la (de)composición segura de los cálculos.
OptionalLos métodos de cumplen estas definiciones , pero infringen las leyes. No sin consecuencias...
Definición de mónada
Necesitas tres cosas para definir una mónada -en términos de Optional:
-
El propio tipo
Optional<T> -
El método
ofNullable(T)que envuelve un valorTen unOptional<T> -
El método
flatMap(Function<T, Optional<U>>) que aplica la función dada al valor envuelto por elOptionalsobre el que se llama
Hay una definición alternativa que utiliza map en lugar de flatMap, pero es demasiado larga para caber aquí.
Leyes de las mónadas
Ahora se pone interesante: una mónada tiene que cumplir tres leyes para ser uno de los chicos guays. En términos de Optional
-
Para un
Function<T, Optional<U>> fy un valorv,f.apply(v)debe ser igual aOptional.ofNullable(v).flatMap(f). Esta identidad izquierda garantiza que no importa si aplicas una función directamente o dejas que lo hagaOptional. -
Llamar a
flatMap(Optional::ofNullable) ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access