Tutorial de Scala – Parte 1

O que é?

Scala é uma linguagem de programação hibrida, isto é, ele é uma linguagem orientada a objetos e funcional. Scala foi desenvolvida para rodar em um Máquina Virtual, primeiramente em um Java Virtual Machine. O principal compilador, scalac, gera bytecodes que rodam na JVM. Entretanto, existe outro compilador que pode gerar código para rodar em .NET CLR.

Scala é uma linguagem produtiva e concisa.

Donwload and Instalação

Faça download da última versão de Scala na página de download. Depois do download faça a instalação e não se esquece de adicionar o diretório bin no seu PATH. E neste diretório que se encontra os executáveis, incluindo o compilador e o interpretador.

Usando o Interpretador Scala

O jeito mais fácil de começar com Scala é através do seu intepretador que é um “shell” interativo para escrever código Scala.

Para iniciar o interpretador, abra seu terminal e digite: scala

leonardo:~$ scala
Welcome to Scala version 2.7.5.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_13).
Type in expressions to have them evaluated.
Type :help for more information.

scala>

Tente digitar no interpretador algo como  1 + 1 e pressione enter.

scala> 1 + 1

O interpretador vai imprimir:

res0: Int = 2

Você pode usar esse resultado para fazer outras operações, por exemplo:

scala> res0 * 10

E você agora terá o resultado:

res1: Int = 20

Para imprimir valores, você pode fazer assim:

scala> println("Hello Scala")
Hello Scala

Definindo Variáveis

Para definir variáveis em Scala nos usamos a palavras chaves val e var, a diferença é que quando usamos val, estamos definindo uma variável imutável, isto é, somente podemos definir o valor uma única vez e não será permitido alterá-la. Já com var, podemos mudar o valor normalmente quando necessário.

Vamos dar um exemplo usando val:

scala> val msg = "Hello Scala"
msg: java.lang.String = Hello Scala

Este exemplo também mostra um caracteristica importante de Scala, o type inference (inferência de tipo). Como pode perceber nos definimos a variável msg e não especificamos o tipo da variável, porém o interpretador (compilador) Scala inferiu definindo o tipo automaticamente. Ele faz isso com base no valor que está sendo usado para iniciar a variável. Como nesse exemplo estamos inicializando a variável com “Hello Scala”, isto é, uma String, o interpretador (compilador) vai dar o tipo java.lang.String para a variável automaticamente.

Bom, mas lembre-se que estamos usando val, portanto não vamos setar um novo valor para essa variável. Se tentarmos isso vamos receber um erro como abaixo:

scala> msg = "Hello Folks"
<console>:5: error: reassignment to val
 msg = "Hello Folks"

Se o que queremos é poder alterar o valor da variável, então devemos usar var para definir a variável:

scala> var greeting = "Hello Scala"
greeting: java.lang.String = Hello Scala

Agora que greeting é uma variável definida com var não um valor (definido com val), podemos redefinir seu valor a qualquer momento.

scala> greeting = "Hello Folks"
greeting: java.lang.String = Hello Folks

Definindo Métodos

Em Scala nós usamos def para definir um método, veja um exemplo:

scala> def max(x: Int, y: Int):Int =  if (x < y) y else x
max: (Int,Int)Int

O nome do método, neste caso max, é seguido por uma lista de parâmetros entre parenteses. Os parâmetros precisam ter seus tipos definidos porque o interpretador (compilador) não infere nos tipos dos parâmetros. Neste exemplo, o método max tem dois parâmetros do tipo Int. Após a definição dos parâmetros, você pode notar que temos “:Int”. Isto define o tipo de retorno do método.

As vezes o compilador vai requerer que você defina o tipo de retorno. Se o método é recursivo, por exemplo, você deve explicitamente declarar o tipo de retorno do método. No caso do nosso método max não é necessário. Neste caso o compilador vai inferir definindo o tipo de retorno automaticamente. Então nesse caso podemos definir o método max da seguinte forma:

scala> def max(x: Int, y: Int):Int =  if (x < y) y else x
max: (Int,Int)Int

Perceba que no caso dos parâmetros nos sempre devemos definir os tipos independente se definimos o tipo de retorno do método ou não.

O nome, os parâmetros e tipo de retorno formam a assinatura do método. Após a assinatura do método, devemos colocar um sinal de igual (=) e então o corpo do método. Como nosso método max consistem em apenas um linha não é necessário colocar o corpo do método entre chaves { }. Mas você pode se quiser:

scala> def max(x: Int, y: Int) = {     
 |   if (x < y) y else x
 | }
max: (Int,Int)Int

Se seu método for ter mais que uma linha, então será necessário colocar o corpo do método entre chaves.

Uma vez que temos nosso método definido, podemos usá-lo invocando da seguinte forma:

scala> max(3, 5)
res5: Int = 5

Quando temos um método que não tem parâmetros como esse:

scala> def greet() = println("Hello Scala")
greet: ()Unit

Podemos invocá-lo usando ou não parenteses:

scala> greet()
Hello Scala

scala> greet
Hello Scala

Por hoje é tudo pessoal.

Prentendo escrever a segunda parte desse tutorial em breve.

No comments yet

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: