Pendant toute l'année écoulée, j'ai été écrit du code Scala (provenant d'un arrière-plan Java). J'ai vraiment aimé la façon dont vous pouvez créer du code plus simple et plus propre, avec des valeurs, des classes de cas, des fonctions map / filter / lambda, des implicits et l'inférence de type. Je l'ai utilisé principalement pour une application basée sur Akka .
Cette année, je suis sur un projet Scala avec une nouvelle équipe, qui aime vraiment la programmation fonctionnelle. Ils utilisent beaucoup Scalaz , et le code est rempli partout avec des applicatifs, des limites de contexte, une monade lecteur / écrivain / état, même la méthode principale est "enveloppée" dans une monade d'E / S. Leur raisonnement est que cela fait que le compilateur "travaille pour nous" en affirmant que le code est correct et que chaque fonction est exempte d'effets secondaires.
Malgré tout, de mon point de vue, toute cette syntaxe gêne vraiment la logique métier. Par exemple, un type de "MyBusinessObject" est très bien, ainsi que des types comme "List [MyBusinessObject]", "Option [MyBusinessObject]" ou même "Future [MyBusinessObject]". Ils ont tous un sens et un objectif clairs. D'un autre côté, un code comme:
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
}
}
cela ajoute-t-il de la complexité au programme, ou est-ce juste moi que je n'ai pas l'habitude de cette façon de programmer?
>>=
et <$>
qui ne voudraient rien dire jusqu'à ce que vous savent ce qu'ils font. Après avoir appris ce qu'ils signifient, cependant, ils m'ont lu très naturellement et rapidement maintenant. Pas vraiment une réponse, juste mon expérience objective avec des choses comme ça. J'utilise également Scala, mais je n'ai aucune expérience avec la bibliothèque Scalaz.
for(i=0; i<7; ++i) { trivialOperation(i); }
avec une trivialOperationCount
variable maladroite , n'est-ce pas?) 'écrirais simplement les appels de méthode d'accesseur en OO. Le résultat est généralement plus concis; peut-être un peu moins explicite, mais la recherche de la déclaration de données le rend normalement clair rapidement. La saisie statique aide beaucoup, ce n'est pas comme dans APL.