De que se trata o artigo:

Exploraremos inúmeros aspectos do uso da linguagem Scala, mostrando o contexto que a deixa em foco hoje. Explicaremos como pode ser feita a instalação do plugin de Scala para o Eclipse. Introduziremos os conceitos básicos da linguagem e alguns recursos avançados, tentando sempre usar exemplos mais práticos.


Para que serve:

Apresentar os principais pontos fortes da linguagem, entendendo a forma básica e suas possibilidades, expondo recursos que aumentam a expressividade, concisão e escalabilidade do código, além de fornecer conhecimentos para fazer em Scala a maioria do que se faz em Java.


Em que situação o tema é útil:

Scala é uma linguagem preparada para vários desafios atuais e futuros. Ela traz uma visão moderna e muitos conceitos de linguagens que serão úteis para o seu uso em novos contextos onde a programação funcional mostra-se indicada.

Scala, de 0 a 100 em segundos:

A linguagem Scala roda dentro da JVM com grande desenvoltura e permite o uso de recursos muito produtivos encontrados nas linguagens dinâmicas e funcionais. Além de suas diversas utilidades práticas, ela pode ser usada como ponte entre a orientação a objetos e o paradigma funcional. É uma boa escolha para uma transição suave entre os paradigmas, e vem ganhando visibilidade devido à crescente necessidade de escrevermos menos, por tornar o desenvolvimento mais simples e possuir uma grande interoperabilidade com Java.
Autores:Édson Patrício,Marcelo CastellanieGilliard Cordeiro

Criada por Martin Odersky, Scala é uma linguagem de programação moderna, de uso geral, com paradigma híbrido (orientada a objetos e funcional), fortemente tipada, com tipagem estática, focada em expressividade, e seu compilador gera bytecode Java. Assim, Scala se beneficia de toda a Plataforma Java, da JVM e bibliotecas já existentes. Com essas características, tudo que já foi feito para Java, de otimizações na JVM até cada uma das bibliotecas que usamos no dia-a-dia, estão à plena disposição para programarmos em Scala.

Acredita-se que nesta linguagem podem estar as soluções para vários de nossos problemas atuais e alguns futuros. Tentaremos neste artigo por uma luz sobre alguns cenários que fazem de Scala uma linguagem de peso no caminho para a sucessão de Java. Para saber mais sobre a linguagem veja o quadro “Fatos relevantes”.

Um futuro próximo e um presente simples

No mínimo dois cenários juntam o paradigma funcional e a necessidade de ganharmos expressividade e simplicidade. O primeiro é o futuro da programação concorrente em ambientes multicore. Neles devemos escalonar as aplicações para fazer um melhor uso dos diversos núcleos de processamento disponíveis nas modernas CPUs. Tanto a continuidade de uma pseudo Lei de Moore, agora para número de cores físicos ou lógicos (Hyper-Threading), quanto a possibilidade de programarmos em nuvens computacionais (onde a abrangência de recursos não é determinística) indicam que talvez tenhamos que mudar nossa forma de programar, otimizando recursos graças a quantidade de processadores disponíveis. Possivelmente teremos que restringir a existência de objetos mutáveis, diminuir o compartilhamento de estados entre objetos e priorizar a transparência referencial, o que já seria uma boa prática nos dias atuais.

Objetos mutáveis: objetos mutáveis são aqueles que possuem a capacidade de terem suas propriedades alteradas. Em programação funcional temos também objetos imutáveis, onde é impossível modificar propriedades de um objeto.

Transparência referencial: é um termo muito utilizado em linguagens funcionais que quer dizer, a grosso modo, que a semântica do programa nunca se altera. Ela é muito útil quando precisamos modificar uma parte de um programa pois temos certeza de que o resto continuará a funcionar como funcionava antes. Isso significa que, ao chamar um método, o único dado novo será seu retorno, os parâmetros seguem iguais.

O outro cenário é mais próximo do nosso dia-a-dia: a crescente necessidade de produzirmos mais, com menos código e de forma simples. Notamos diariamente que precisamos tornar nossa codificação mais fácil e ágil, e frequentemente encontramos situações onde aquilo que estamos fazendo deveria ter uma alternativa mais simples. Pela falta de expressividade da maioria das linguagens de uso geral mais populares, há cada vez mais esforços dedicados a criar linguagens com código mais produtivo (como Groovy, que insere o poder de linguagens dinâmicas na plataforma Java com elegância e simplicidade) ou portar essas linguagens mais produtivas para dentro de plataformas já consagradas (como o JRuby e o Jython, que possibilitam usar o Ruby ou o Python ao lado do Java).

Mas se fosse possível, quando necessário, usar um estilo de programação mais dinâmico e produtivo dentro de uma linguagem de uso geral? Com um poder de abstração e expressividade bem maior, tendo o estilo de programação, ou até mesmo a sintaxe, como apenas mais uma biblioteca? Se pudéssemos escolher entre simplicidade ou potencialidade a cada momento? Escalabilidade é a palavra chave. “Scala faz coisas simples serem fáceis e coisas difíceis serem possíveis”, tem performance similar ao código Java e costumamos escrever menos para fazer o que faríamos em Java. Para facilitar, das várias linguagens que rodam na JVM, Scala possui uma interoperabilidade excelente com a linguagem Java. Tanto com Scala acessando biblioteca Java, quanto no sentido contrário (código Java acessando código Scala), os resultados de integração impressionam.

Apresentaremos nesse artigo as principais características de Scala, suas similaridades e diferenças em relação a Java, além dos motivos que estão dando visibilidade para esta linguagem.

Objeto-funcional

O nosso bom e velho paradigma orientado a objetos dá consistência a nossos softwares e uma excelente aproximação dos sistemas com o mundo real. Vida longa à OO! Porém, por vezes também deixa nossa forma de programar burocrática e prolixa. A grande quantidade de indireções e a explosão de estados dos objetos no paradigma OO, podem criar antipadrões (anti-patterns). Mas se tivéssemos mesmo que apontar um vilão, este não seria, nem de longe, a orientação a objetos. E sim o estilo que programação imperativo presente na maioria das “grandes” linguagens.

Mas e o paradigma funcional, o que seria? A programação funcional é um estilo que se opõe ao imperativo. Ela deixa a forma como desenvolvemos mais matemática (por favor, não se assuste), diminuindo a mutabilidade de nossos objetos, evitando estados compartilhados. O paradigma funcional procura simplificar o código, deixando-o mais conciso, mais expressivo e mais modular (veja o quadro “Paradigma Funcional”).

É possível imaginar um paradigma “objeto-funcional”, com o melhor dos dois paradigmas. Usando uma gama maior de abstrações modernas como closures, mixin, first-class functions, pattern matching, comprehensions, implicit converters, actors, monads entre outras (nem todas vindas do paradigma funcional), podemos deixar nosso código mais consistente e fácil de ser testado. Inclusive, potencialmente mais preparado para um futuro multicore ou de programação em nuvens computacionais. Além disso, talvez seja hora de restringir o uso de certos estilos de código trazidos desde a programação estruturada. É comum acharmos, mesmo em códigos bem orientados a objetos, trechos com um estilo puramente estruturado de whiles, fors e swicht cases. Declarações dessa natureza, mesmo quando não atentam contra a orientação a objetos, podem limitar a escolha pela imutabilidade, obrigando um número excessivo de atribuições diretas a variáveis. Scala traz alternativas ou avanços a essas estruturas.

Já existem alguns casos de sucesso usando Scala dentro do Google App Engine. Para conhecer o GAE, leia o artigo “Java no Google App Engine” publicado na Edição 71.

Apesar de todo o apelo do paradigma funcional, optamos neste artigo por não avançarmos nesse assunto. Para termos uma sensação de transição suave, não nos prenderemos a nenhuma imposição do paradigma. A mudança do estilo imperativo de programar para o funcional deve ser muito bem estudada e entendida, e nos faz programar melhor em Java inclusive. Mas não será uma preocupação aqui, o foco será o uso de Scala nos mesmos moldes de Java.

O que precisamos para programar em Scala

Já temos à disposição plugins para Scala para os principais IDEs Java. Por enquanto, tanto o plugin para o Eclipse, quanto para o NetBeans ainda deixam a desejar em relação à maturidade dos recursos disponíveis para Java (formatação, refatorações, organização de imports, automações e etc.). Estamos esperando por um salto de qualidade substancial no plugin para Eclipse brevemente. Isso devido ao recente anúncio do envolvimento direto do criador da linguagem no desenvolvimento do plugin. Essas expectativas devem se concretizar no lançamento da versão 2.8 de Scala (que já deverá estar disponível quando você receber esta Edição).

Para programar em Scala precisamos do JDK 1.5 ou superior instalado. Neste artigo foi utilizada a versão 1.6.0_13. Além disso, é preciso instalar o Scala IDE for Eclipse versão 2.7.5 no Eclipse Ganymede 3.4.2. O primeiro passo é adicionar o site de instalação do plugin (www.scala-lang.org/scala-eclipse-plugin) no menu Help>Software Updates> Available Software clicando no botão Add site (veja a Figura 1).

Criação do site

Figura 1. Criação do site de atualização com a respectiva URL

Depois de clicarmos no botão Ok, devemos selecionar o plugin no site recém adicionado e clicar no botão Install, conforme a Figura 2.

Escolha da versão 2.7.5.final

Figura 2. Escolha da versão 2.7.5.final (estável) do plugin

Em seguida é preciso confirmar o item que será instalado (Figura 3). Se a instalação for realizada em outras versões do Eclipse ou uma configuração de plugins diferente, é possível o aparecimento de alguns avisos referentes a dependências. Na maioria das vezes o próprio Eclipse resolve as dependências. Para finalizar esta etapa é preciso aceitar a licença do plugin para que a instalação comece (Figura 4).

Detalhes da instalação ...

Quer ler esse conteúdo completo? Tenha acesso completo