Durante todo o ano passado, eu escrevi o código Scala (vindo de Java). Gostei muito de como você poderia criar código mais simples e limpo, com vals, classes de caso, funções map / filter / lambda, implícitos e a inferência de tipo. Eu o usei principalmente para um aplicativo baseado em Akka .
Este ano, estou em um projeto Scala com uma nova equipe, que realmente gosta de programação funcional. Eles usam intensamente o Scalaz , e o código é preenchido em todos os lugares com aplicativos, limites de contexto, mônada de leitor / gravador / estado, até o método principal é "encapsulado" em uma mônada de E / S. O raciocínio deles é que isso faz o compilador "trabalhar para nós" ao afirmar que o código está correto e que cada função está livre de efeitos colaterais.
Mesmo assim, do meu ponto de vista, toda essa sintaxe realmente atrapalha a lógica dos negócios. Por exemplo, um tipo de "MyBusinessObject" é bom, assim como tipos "List [MyBusinessObject]", "Option [MyBusinessObject]" ou mesmo "Future [MyBusinessObject]". Todos eles têm um significado e propósito claros. Por outro 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
}
}
isso adiciona complexidade ao programa ou sou apenas eu que não estou acostumado a esse modo de programação?
>>=
e <$>
, que não significam nada até você sabe o que eles fazem. Depois de aprender o que eles significam, no entanto, eles lêem muito naturalmente e rapidamente para mim agora. Não é realmente uma resposta, apenas minha experiência objetiva com coisas assim. Também uso o Scala, mas não tenho experiência com a biblioteca Scalaz.
for(i=0; i<7; ++i) { trivialOperation(i); }
com alguma trivialOperationCount
variável incômoda , não é?) Agora, linguagens de programação funcionais com correspondência de padrões às vezes introduzem mais algumas variáveis nas quais você acabei de escrever as chamadas do método acessador no OO. O resultado é geralmente mais conciso; talvez um pouco menos auto-explicativo, mas procurar a declaração de dados normalmente deixa claro rapidamente. A digitação estática ajuda muito, não é como no APL.