Scala, vale a pena?

[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=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.

Martin Odersky vai adicionar STM a Scala… mais um treco na pia da cozinha!! :lol:

[quote=Nykolas Lima]Um colega do trabalho fala muito bem de Scala. Tentei dar uma procurada sobre mercado para Scala, e não encontrei muita coisa.

Vocês acham que vale a pena investir no estudo desta linguagem?
Indicam algum fórum, blog, referências?

Abraços[/quote]

Oi Nykolas Lima,

Não sei nada sobre essa linguagem,a não ser o que acabei de ler nesse tópico,mas acho que sempre vale a pena estudar uma nova linguagem… :wink:

[quote=Anime][quote=Nykolas Lima]Um colega do trabalho fala muito bem de Scala. Tentei dar uma procurada sobre mercado para Scala, e não encontrei muita coisa.

Vocês acham que vale a pena investir no estudo desta linguagem?
Indicam algum fórum, blog, referências?

Abraços[/quote]

Oi Nykolas Lima,

Não sei nada sobre essa linguagem,a não ser o que acabei de ler nesse tópico,mas acho que sempre vale a pena estudar uma nova linguagem… :wink: [/quote]

 Depende Anime. Temos que estudar linguagens que focam diretamente a nossa área. Analista de sistemas estudando fortran pode não ter um aproveitamento profissional tão bom quanto para um matemático. A não ser que seja para adquirir conhecimento mesmo.

Mas acho que você tem razão sim. Agregar conhecimento sempre é uma ótima idéia.

Tem um framework para STM em Scala mas como a linguagem não é funcional e estruturas de dados não são persistentes não é tão eficiente como em Clojure. Estrutura de dados em Scala são apenas imutáveis.

Em Scala há 2 tipos de estruturas de dados: as que são mutáveis (no pacote scala.collection.mutable) e as que não o são (em scala.collection.immutable). Como o compilador do Scala é um pouco mais esperto que o do Java, é suficiente escrever:

immutable.Vector

ou

mutable.Vector

em vez de usar

scala.collection.immutable.Vector

http://www.scala-lang.org/sites/default/files/sids/admin/Tue,%202010-07-20,%2010:39/collections.pdf

E de fato, o esquema de mônadas do Haskell é meio difícil de usar para quem está acostumado com Java. O esquema do Scala é muito mais simples nesse ponto.

Monads

Scala Monads tutorials

Bom como podem ver Scala tambem tem monads. Mais algum pré-requisito para podermos dizer que Scala suporta Programação Funcional?

[quote=entanglement]Em Scala há 2 tipos de estruturas de dados: as que são mutáveis (no pacote scala.collection.mutable) e as que não o são (em scala.collection.immutable). Como o compilador do Scala é um pouco mais esperto que o do Java, é suficiente escrever:

immutable.Vector

ou

mutable.Vector

em vez de usar

scala.collection.immutable.Vector
[/quote]

Estruturas de dados mutáveis não são usadas com STM.

[quote=fredferrao]
Bom como podem ver Scala tambem tem monads. Mais algum pré-requisito para podermos dizer que Scala suporta Programação Funcional?[/quote]

Bom, parece que vc mesmo chegou a conclusão que Scala não é uma linguagem funcional, apesar de suportar esse estilo de programação.

Tem um framework para STM em Scala mas como a linguagem não é funcional e estruturas de dados não são persistentes não é tão eficiente como em Clojure. Estrutura de dados em Scala são apenas imutáveis.[/quote]

“Scala não é funcional” é uma conclusão e não uma premissa. Acho que é um dos pontos centrais da discussão.

Por favor, explique os seguintes pontos:
Por que as estruturas de dados imutáveis de Scala não seriam também persistentes?
Por que uma estrutura de dados não persistente seria menos “eficiente” do que uma persistente?
Qual o contexto em torno da palavra “eficiente” (eficiente em memória, em CPU…)?

Sr Ordesky vai adicionar estrutura de dados persistentes a Scala tb.

Em algum ponto a diferença será apenas na motivação, em Clojure ela resolve um problema, em Scala ela é adicionado como mais uma feature.

[quote=esmiralha]
“Scala não é funcional” é uma conclusão e não uma premissa. Acho que é um dos pontos centrais da discussão.[/quote]

O que eu quis dizer é que Scala não é funcional porque suas estruturas de dados não são persistentes.

Estrutura de dados em Clojure além de imutáveis são persistentes, isto significa que quando “modificadas”, as versões anteriores são preservadas e aqueles nós não afetados pela “atualização” são compartilhados com a nova estrutura, ao invés de serem copiadas.

Scala possui uma implementação “nativa” de vetor e mapa persistentes.

Já tem? hm… legal. Qual o pacote?

Já tem? hm… legal. Qual o pacote?[/quote]