Scala ou Java? Explorando mitos, polêmicas e fatos

Artigo publicado

Movido para outras linguagens.

Obrigado pelo prestigio Carlos!

Se alguem quiser trocar idéia sobre o assunto, só postar :slight_smile:

[quote=jfaerman]Obrigado pelo prestigio Carlos!

Se alguem quiser trocar idéia sobre o assunto, só postar :)[/quote]

Parabéns pelo artigo. Minha impressão é que o Scala te oferece muito mais poder e flexibilidade, além do melhor dos dois mundos (functional programming and oo programming).

Só que esse poder vem com um custo alto de complexidade. Programar em scala e entender sua sintaxe não é algo simples. O que eu mais gosto em relacao ao Java é que a linguagem em si (sintaxe) é ridícula. Qualquer um entende. Acho que tirando generics, Java é a linguagem com a sintaxe mais simples e direta.

Agora Scala realmente manda bem na questão de concorrência. Mas vale lembrar que Java também suporta ACTORS, só que muito mais verbose => http://akka.io/

Scala é melhor que Java? Sem dúvida nenhuma. Muito mais poderosa e flexível. Mas isso vem com o custo da complexidade que não me agrada muito. Se um dia eu tiver a oportunidade (= tempo + motivacao) para aprender Scala ficarei muito feliz, mas até lá o bom e velho Java resolve as coisas muito bem.

Um ponto importante nessa questão de complexidade é que voce pode escrever o programa em Scala quase da mesma maneira que faria em Java.
Basta ignorar as funcionalidades normalmente chamadas de “complexas” ( vairancia e limites de tipos, programação funcional, etc)
Se fizer isso, muito provavelmente o programa vai ficar, na verdade mais simples do que a versão java.
Mas ai estaria perdendo o melhor da festa… :slight_smile:

[quote=saoj][quote=jfaerman]Obrigado pelo prestigio Carlos!

Se alguem quiser trocar idéia sobre o assunto, só postar :)[/quote]

Parabéns pelo artigo. Minha impressão é que o Scala te oferece muito mais poder e flexibilidade, além do melhor dos dois mundos (functional programming and oo programming).

Só que esse poder vem com um custo alto de complexidade. Programar em scala e entender sua sintaxe não é algo simples. O que eu mais gosto em relacao ao Java é que a linguagem em si (sintaxe) é ridícula. Qualquer um entende. Acho que tirando generics, Java é a linguagem com a sintaxe mais simples e direta.

Agora Scala realmente manda bem na questão de concorrência. Mas vale lembrar que Java também suporta ACTORS, só que muito mais verbose => http://akka.io/

Scala é melhor que Java? Sem dúvida nenhuma. Muito mais poderosa e flexível. Mas isso vem com o custo da complexidade que não me agrada muito. Se um dia eu tiver a oportunidade (= tempo + motivacao) para aprender Scala ficarei muito feliz, mas até lá o bom e velho Java resolve as coisas muito bem.
[/quote]

Detalhe que o akka é escrito em Scala, mas os caras quiseram dar suporte ao java, claro java esta em todo lugar, scala esta começando a ganhar mercado ainda!

Dessas linguagens para JVM a que estou mais estudando e programando é o Groovy.

Essa linguagem é bem próxima do Java, por isso, preferi partir pra ela agora ao invés de Scala, e o Groovy é uma linguagem de script, Scala se não me engano, não. Portanto, é possível de dentro de uma aplicação Java rodar rotinas Groovy numa boa, com Scala, até onde li e vi isso não é possível.

Quando eu tiver mais tempo passarei a dar uma olhada em Scala, mas por enquanto, Groovy mesmo.

[quote=Grinvon]Dessas linguagens para JVM a que estou mais estudando e programando é o Groovy.

Essa linguagem é bem próxima do Java, por isso, preferi partir pra ela agora ao invés de Scala, e o Groovy é uma linguagem de script, Scala se não me engano, não. Portanto, é possível de dentro de uma aplicação Java rodar rotinas Groovy numa boa, com Scala, até onde li e vi isso não é possível.

Quando eu tiver mais tempo passarei a dar uma olhada em Scala, mas por enquanto, Groovy mesmo.[/quote]

Scala é muito compativel com java:
Chamar codigos e libs java a partir do Scala = 100% tranquilo e compativel
Chamar codigo Scala a partir do java = deve-se tomar alguns cuidados na hora de contruir o código em Scala, senão a coisa fica complicada no lado do java, mas da pra chamar tambem.

Em suma, é compativel nas duas direçoes, mais traquilo a partir do Scala.

A interoperabilidade Java <-> Scala é boa mesmo, mas não é sem complicações em ambas direções.
Ao chamar libs java a partir de Scala tem que cuidar com os tipos de dados diferentes e conversões implicitas, principalmente de Collections, e as coisas que não existem em Scala, como interfaces.
No artigo tem uma seção sobre isso (Scala e Java são interoperáveis?)

Assim como Groovy, Scala pode rodar tanto interpretado como script quanto como compilado.
Uma curiosidade (sem flames, pls) sobre isso é que o criador de Groovy disse que provavelmente não o teria feito se conhecesse Scala antes: https://groups.google.com/forum/#!topic/groovy-sydney/7zyOZMNZYsY

ok, acabei de ler o artigo, ta bacana, apenas alguns pontos:

SBT, até onde sei é Simple Build Tool e não Scala Build Tool, apesar de ser usado para scala somente :smiley:

Compilação incremental, pois não é exatamente o que o SBT faz!?.
Se tu abrir o SBT e der um ~compile, ele ira compilar tudo e ficar esperando arquivos serem alterados, quando algum for, ele compila ele novamente, junte o JRebel e ja era, fica muito tranquilo desenvolver web app com o Lift por exemplo.

Enquanto as IDE não chegam num nivel maior de maturidade, acho o SBT indispensavel para desenvolvimento Scala.

Atualmente faço o seguinte para meus desenvolvimentos iniciais e estudo do Lift, uso SBT+JRebel como build e Intellij como IDE, na verdade o Intellij é usado apenas como editor, com todas suas opçoes de autocomplete e tudo mais que um excelente IDE possui, mas o codigo esta sendo constantemente compilado pelo SBT+JRebel. Ou seja, é codificar no Intellij e dar F5 no navegador, muito facil e pratico!

Eu sei, Fred. Estava falando de outra coisa, da possibilidade de scripting com Scala.

Mas é isso, Scala parece-me ser bastante poderosa, com o tempo, irei dar uma olhada melhor nela.

Opa, mto obrigado pela correção, arrumei no artigo.

Eu tenho usado mais o maven que o SBT, mas as duas ferramentas são boas, mas com forças e fraquezas distintas.

O que quis dizer é que quanto mais “incremental” o compilador, melhor.
O ideal seria termos algo como o JDT do eclipse, que é capaz de compilar no nível de métodos, mas o SBT ~compile realmente quebra bem o galho.

Muito bom o artigo sobre Scala… esclareceu algumas dúvidas.

Meu único problema com a linguagem é que não consigo ver que tipo de aplicações ela pode ser utilizada, e com tantos adeptos da linguagem criticando-a, inclusive desenvolvedores famosos na comunidade (como o criador do franewirk Lift que recentemente abandonou o barco) eu me pergunto se vale a pena mesmo aprender essa linguagem.

[quote=Botocudo]Muito bom o artigo sobre Scala… esclareceu algumas dúvidas.

Meu único problema com a linguagem é que não consigo ver que tipo de aplicações ela pode ser utilizada, e com tantos adeptos da linguagem criticando-a, inclusive desenvolvedores famosos na comunidade (como o criador do franewirk Lift que recentemente abandonou o barco) eu me pergunto se vale a pena mesmo aprender essa linguagem.[/quote]

Qualquer tipo de aplicação que voce queira, web, desktop com Swing tem gente desenvolvendo, até para android tem uns que estão usando Scala pra desenvolver.

Sobre o criador do Lift, não, ele não abandonou o barco, ele continua muito ativo na comunidade do lift e ainda é commiter, ele apenas deixou de ser o “ditador”(nas palavras dele) do projeto e esta mais focado em seu novo projeto o http://visi.io/, mas o lift continua firme e forte com varios commiters. Ele esta sim chateado com algumas coisas, acho que a retrocompatibilidade dos binarios do Scala é o principal se nao me engano, e a falta de foco por parte dos criadores da linguagem em sanar estas questões.

Mas esta questão é complicada, como o jfaerman disse o artigo, para evoluir rapido tem que quebrar algumas coisas, eu até li em algum lugar não lembro quem falou, se deveriam considerar Scala antes da 2.10 como um prototipo para a versão final 2.10, algo assim :smiley: