Durante todo el año pasado he escrito código Scala (proveniente de un fondo Java). Realmente me gustó cómo podría crear un código más simple y limpio, con vals, clases de casos, funciones de mapa / filtro / lambda, implicidades y la inferencia de tipos. Lo he usado principalmente para una aplicación basada en Akka .
Este año estoy en un proyecto Scala con un nuevo equipo, a quien realmente le gusta la programación funcional. Usan mucho Scalaz , y el código está lleno en todas partes con solicitantes, límites de contexto, mónada de lector / escritor / estado, incluso el método principal está "envuelto" en una mónada de E / S. Su razonamiento es que esto hace que el compilador "trabaje para nosotros" al afirmar que el código es correcto y que cada función está libre de efectos secundarios.
Aun así, desde mi punto de vista, toda esta sintaxis realmente se interpone en el camino de la lógica empresarial. Por ejemplo, un tipo de "MyBusinessObject" está bien, al igual que tipos como "List [MyBusinessObject]", "Option [MyBusinessObject]" o incluso "Future [MyBusinessObject]". Todos tienen un significado y un propósito claros. Por otro lado, código como:
def method[M[_]: Applicative] = {
case (a, b) => (ca[M](a) |@| cb[M](b)) {
case t @ (ra, rb) =>
if (ra.result && rb.result) t.right
else t.left
}
}
¿Le agrega complejidad al programa o soy yo el único que no estoy acostumbrado a esta forma de programación?
>>=
y <$>
, que no significan nada hasta que saber lo que hacen Sin embargo, después de aprender lo que significan, ahora me leen muy natural y rápidamente. Realmente no es una respuesta, solo mi experiencia objetiva con cosas como esta. También uso Scala, pero no tengo experiencia con la biblioteca Scalaz.
for(i=0; i<7; ++i) { trivialOperation(i); }
con alguna trivialOperationCount
variable incómoda , ¿verdad?) Ahora, los lenguajes de programación funcionales con coincidencia de patrones a veces introducirán algunas variables más donde simplemente escribiría llamadas al método de acceso en OO. El resultado es generalmente más conciso; quizás un poco menos autoexplicativo, pero buscar la declaración de datos normalmente lo deja claro rápidamente. La escritura estática ayuda mucho, no es como en APL.