sábado, 23 de maio de 2009

Scala - Uma breve introdução

Prazer, Scala

A linguagem de programação Scala é uma linguagem de propósito geral é orientada a objetos e funcional com tipagem estática,  foi influenciada por outras linguagens como Java, Haskell, Smalltalk entre outras. Se comparada com o Java, você pode escrever até 3 vezes menos códigos e chegar ao mesmo resultado.

Instalação

  1. Instalar a JVM
  2. Fazer o download do Scala para seu sistema operacional nesse LINK
  3. Depois que o download for concluido, descompactar o arquivo em uma pasta a sua escolha
  4. Ir nas variaveis de ambiente do sistema e editar a variavel path incluindo no final da mesma o endereço de onde foi descompactado o arquivo mais a pasta bin, ex.: C:\Documents and Settings\scala-2.7.1.final\bin
  5. Para testar, entrar no cmd e digitar o comando “scala”, se a instalação foi feita de forma correta, será exibida uma mensagem com a versão do Scala e a versão da JVM que estão instaladas.

Primeiros passos

Scala é uma linguagem integrada com Java e roda em cima da VM, todas as classes do pacote java.lang são importadas automaticamente por padrão e todas as outras podem ser importadas explicitamente assim:

   1: import java.util.ArrayList
   2: import java.util._
   3: import java.util.{ArrayList, Arrays}

No exemplo acima, a linha numero 1 importa a classe ArrayList, a linha 2 importa todas as classes que estão dentro do pacote util ( o que no java é um * em Scala é um _ porque * é um identificador valido, podendo ser um nome de um função por exemplo ) a ultima linha importa 2 classes diferentes que estão dentro do pacote util usando a mesma linha de import.


Vamos ao classico exemplo:



   1: object Hello {
   2:     def main(args: Array[String]){
   3:       println("Olá Scala!")
   4:     }
   5: }

Para quem programa em Java esse exemplo é bastante familiar, foi declarado um função main que recebe como argumento um Array de Strings e no corpo da função é escrito no console a mensagem “Olá Scala!” ( note que não foi necessário declarar o System.out para usar o método println ), o main não retorna um valor, então não é necessario colocar um valor de retorno.


Reparem na declaração da palavra “object”, essa declaração diz que essa classe terá somente uma unica instancia, um singleton.


O main não é static porque não existem membros estaticos em Scala, caso o programador precise disso ele simplesmente declara um “object” que é um singleton.


Objetos, objetos, objetos… tudo é objeto


No Scala tudo é objeto, diferente do Java onde existe uma diferença entre tipos primitivos de tipos de referência e em Java também não é permitido que funções sejam tratadas como valores.


Os numeros em Scala são objetos onde eles podem ter funções.


As funções em Scala são objetos, isso quer dizer que em Scala você pode ( e deve ) passar uma função como argumento de uma outra função ( comum em javascript onde se encotra funções de callback ) como vemos abaixo:



   1: object TesteCallBack {
   2:     def imprimir(callback: () => unit){
   3:         while(true){
   4:           callback();
   5:         }
   6:     }
   7:     def imprimirTexto(){
   8:         println("Obaaaaaa, eu sou um objeto!!!");
   9:     }
  10:     def main(args: Array[String]){
  11:         imprimir(imprimirTexto);
  12:     }
  13: }

Será exibido no console infinitamente a frase “Obaaaaaa, eu sou um objeto!!!”, isso só é possivel porque os métodos em Scala são objetos e possuem valor.


Reparem no “() => unit” isso quer dizer que o método não recebe parametros e não possue um retorno ( similar ao void do Java ).


podemos alterar um pouco o código acima e usar uma função anonima:



   1: def main(args: Array[String]){
   2:     imprimir(() => println("Obaaaaaa, eu sou um 
   3: objeto!!!"));
   4: }


No exemplo acima, não foi necessario a passagem da função “imprimirTexto”, foi criada uma função anonima, no lado esquerdo da flecha existe um parenteses vazio, isso quer dizer que essa função anonima não possue uma lista de argumentos.


No proximo post falarei um pouco mais sobre a sintaxe, e explicarei conceitos sobre Classes, Herança e Polimorfismo, Mixins e Generalização. Até Mais!!


Um Abraço!