[quote=mochuara][quote=fredferrao]
Agora quer persistir nos teus flames, então explique pra todo mundo aqui, o que uma linguagem funcional deve suportar, se é que voce tem conhecimento para isto :shock: [/quote]
O que Scala oferece como recurso de linguagem (ou até mesmo de framework) para lidar com estado mutável (como monads em Haskell e refs em Clojure)?
Nada.
Portanto é tão funcional, quanto C pode ser OO.[/quote]
Acabei de ler uma discussão bem grande sobre Scala ser funcional ou não, no fim das contas, nenhuma das linguagens, nem mesmo as que voce citou, são 100% PURAS, haskell é a que mais chega perto segundo os caras, Clojure tem side effects com mutable references e uncontrolled I/O.
É uma boa leitura sobre o assunto, mas leiam os comentarios, é la que esta a discussao do assunto: http://www.codecommit.com/blog/scala/is-scala-not-functional-enough
Então eu digo, scala pode não ser pura, mas SUPORTA programação funcional, tem mecanisnos para isto e cabe entao ao programador fazer uso.
O que voce quer dizer com “lidar com estado mutável”? Eu nao conheco haskell ou Clojure para pegar a referencia.
Mas Scala tem todo um pacote de collections imutaveis scala.collection.immutable, todas as data structures dentro deste pacote são imutaveis, scala te encoraja a usar sempre val ao inves de var, uma vez declarado uma variavel com val ela se torna imutavel, Scala tem Higher-order funcions, e tudo mais ja citado, então cabe ao developer programar funcionalmente ou não.
Por fim, o mais correto então seria dizer que Scala não é pure-functional, mas sim suporta programação funcional, assim como as outras tambem de um jeito ou outro nao são 100% puras, tambem poderiamos dizer que haskell é mais funcional que Scala, mas isto tambem nao quer dizer que Scala nao tenha sua parte funcional.
O cara do post para dizer que scala não é funcional leva em conta que uma linguagem para ser chamada de funcional não pode ter qualquer tipo de mutabilidade ou side effects, porem nos comentarios viu-se que todas as outras ditas funcionais tambem tem sua parte de mutabilidade e side effects, inclusive Clojure, Erlang, etc, então tambem seriam impuras.