exception error-handling clojure maybe either

exception - Manejo de errores idiomáticos en Clojure



error-handling maybe (2)

Cuando me pongo mi sombrero, creo que quizás Clojure idiomático simplemente hace lo simple y comprueba los valores de retorno.

Cuando me pongo el sombrero de Java (a regañadientes, debo agregar), creo que, dado que Clojure se ejecuta en la JVM, la forma natural debe ser utilizar las excepciones de JVM.

Cuando me pongo el sombrero funcional, pienso que debe haber algún tipo de construcción monádica o macro de subprocesamiento que pueda manejar los errores de una manera compostable.

Entonces, ¿cuál es la forma idiomática de manejar los errores en un programa de Clojure?


El manejo de errores de Clojure generalmente está orientado a excepciones (no verificadas).

Slingshot hace que el uso de excepciones sea más agradable al permitir, por ejemplo, desestructurar valores de excepción lanzados.

Para obtener una alternativa que permita el manejo de errores de estilo erlang, debe fijarse en dire . Esta publicación de blog ofrece una buena descripción general de lo racional para dire, así como una descripción general de los mecanismos de manejo de errores de Clojure y sus inconvenientes.


Para un enfoque muy funcional, eche un vistazo a los cats , que corresponderían a "algún tipo de construcción monádica":

Categoría Teoría y abstracciones algebraicas para Clojure y ClojureScript. http://funcool.github.io/cats/latest/

Ejemplo tomado de su documentación:

(require ''[cats.core :as m]) (require ''[cats.monad.maybe :as maybe]) (m/mappend (maybe/just [1 2 3]) (maybe/nothing) (maybe/just [4 5 6]) (maybe/nothing))

Puede ver que nothing es equivalente a nothing , excepto que no tiene que revisar nada manualmente.