validation scala error-handling monads scalaz

validation - ¿Error al manejar mónadas en Scala? Probar vs Validación



error-handling monads (1)

scalaz.Validation Se dice que la scalaz.Validation es más poderosa que la mónada Try , ya que puede acumular errores.

¿Hay ocasiones en las que podría elegir Try sobre scalaz.Validation o scalaz.// ?


El argumento más importante a favor de Try es que está en la biblioteca estándar. También se usa en la biblioteca estándar; por ejemplo, las devoluciones de llamadas que se registran con onComplete Future deben ser funciones de Try . Puede usarse más extensamente en la biblioteca estándar en el futuro.

El hecho de que esté en la biblioteca estándar también significa que le resultará familiar a más personas. Probablemente lo encontrará en más de las bibliotecas de terceros que usa. Y, por supuesto, a veces es posible que no se le permita usar Scalaz (o cualquier otra dependencia) o que desee evitarlo por otras razones perfectamente buenas.

Otras cosas: no puedo recordar la última vez que escribí un // que no tenía Throwable en su lado izquierdo (tengo, no es algo que haga a menudo). Try hornear esto, para que no tengas que preocuparte por escribir un alias o lo que sea.

Como señala senia en los comentarios anteriores, podría decirse que hay algo un poco intuitivo acerca de sesgar un tipo cualquiera, pero que todavía usa el lenguaje de "izquierda" y "derecha" (como // es, y lo hace). ¿Por qué se une // a través del lado derecho? Porque lo hace, por eso. Personalmente, no encuentro el nombre tan objetable, pero puedo entender por qué algunas personas podrían hacerlo. Try evitar el problema al tener nombres de constructores que indiquen claramente su semántica: Success y Failure , no a la Left ni a la Right o -// y //- .

Ahora que estamos llegando a las razones completamente superficiales y subjetivas para usar el Try , algunas personas pueden pensar que // y -// y //- son feas. Por lo general, no me importa el código pesado del operador, y encuentro la mezcla de barras y guiones realmente desagradable de escribir y leer.

Así que esos son algunos argumentos a favor de Try , según lo solicitado, pero concluiré diciendo que nunca lo uso, yo mismo. No me importa específicamente mucho el hecho de que viola las leyes de la mónada (aunque puedo entender por qué la gente lo hace), pero encuentro que la Validation mucho menos ad-hoc y más fácil de razonar, y me gusta tener acceso a ambos ( Validation cuando quiero acumular errores , // cuando necesito una secuencia monádica ) en un solo marco.