A Linguagem de Programação Scala
por MoIP LabsScala é uma linguagem de programação de multiparadigma, projetada para funcionar nos modelos Orientado a Objeto, Imperativa e Funcional. Criada por Martin Odersky em 2003, Licença BSD, também é plenamente interoperável com Java. O pré-requisito para o uso do Scala é a JDK versão 1.4 ou superior. A instalação do Scala por ser vista em http://www.scala-lang.org/node/211.
Agora, com o Scala instalado vamos mostrar o seu interpretador:
$ scala
Welcome to Scala version 2.9.1.r0-b20110831114755 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0).
Type in expressions to have them evaluated.
Type :help for more information.
scala> 3 * 3
res0: Int = 9
scala>
Welcome to Scala version 2.9.1.r0-b20110831114755 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0).
Type in expressions to have them evaluated.
Type :help for more information.
scala> 3 * 3
res0: Int = 9
scala>
Repare que ele é bem parecido com o interpretador de outras linguagens de programação, por exemplo, Python. Observe também que na execução acima o resultado da expressão foi armazenado na variável res0 com o valor 9 do tipo inteiro. Então, podemos aproveitar o resultado para mais interações:
scala> res0 * 9
res1: Int = 81
res1: Int = 81
Agora, caso tenha interesse em salvar o resultado em uma variável com um nome específico basta fazer:
scala> val resultado = res0 * res1
resultado: Int = 729
resultado: Int = 729
Agora, vamos criar um primeiro código em Scala, exemplo ola_mundo.scala:
val msg = "Ola mundo!"
println(msg)
println(msg)
Para executar o código:
$ scala ola_mundo.scala
Ola mundo!
$
Ola mundo!
$
Reparem que se forem verificar o tipo da variável msg no interpretador o retorno será java.lang.String, isso mostra o porque de Scala ser altamente interoperativa com o Java. Porém, caso não tenha interesse em usar a classe String do Java o Scala tem a sua própria implementação:
scala>val str_scala: String = "string em scala"
str_scala: String = string em scala
scala>println(str_scala)
string em scala
str_scala: String = string em scala
scala>println(str_scala)
string em scala
Então, sabendo como declarar variáveis e operações básica de matemática podemos ver como definir uma função:
def max2(x: Int, y: Int) = if (x < y) y else x
val x = 13
val y = 45
println(max2(x, y))
val x = 13
val y = 45
println(max2(x, y))
Agora, execute e confira o resultado:
$ scala max2.scala
45
45
Repare que a sintaxe para declarar uma função é bem simples: def <nome da função>(parâmetros) = <corpo da função> Os parâmetros devem ser separados por vírgula e com o seguinte formato: <nome>: tipo. Trabalhando com loops usando while:
var i = 0
while (i < args.length) {
println(args(i))
i += 1
}
while (i < args.length) {
println(args(i))
i += 1
}
Repare que o contador i nesse exemplo foi declarado com var e não val pois nesse caso o valor de i será modificado durante o script por isso essa necessidade de modificação na declaração. No exemplo acima serão impressos todos os argumentos passados na chamada de execução do script em Scala:
$ scala loop.scala 1 2 3 4 5 6
1
2
3
4
5
6
1
2
3
4
5
6
Assim como no Java, PHP e outras linguagens de programação o Scala tem o um recurso muito útil para interação, veja o exemplo anterior usando esse recurso:
args.foreach(arg => println(arg))
Outros tipos de dados mais interessantes também são implementados em Scala e funções mais elaboradas podem ser criadas, veja o exemplo do algoritmo de ordenação Quick Sort abaixo:
def qsort: List[Int] => List[Int] = {
case Nil => Nil
case pivot :: tail =>
val (smaller, rest) = tail.partition(_ < pivot)
qsort(smaller) ::: pivot :: qsort(rest)
}
var l = List(99, 3, 23, 43, 5, 54, 56)
for (i <- qsort(l))
println(i)
case Nil => Nil
case pivot :: tail =>
val (smaller, rest) = tail.partition(_ < pivot)
qsort(smaller) ::: pivot :: qsort(rest)
}
var l = List(99, 3, 23, 43, 5, 54, 56)
for (i <- qsort(l))
println(i)
Com esse artigo mostra-se como é fácil programar em Scala e a semelhaça dela com o Java. Outra justificativa pelo estudo da linguagem são os seus cases de uso como, por exemplo, Twitter, LinkedIn, Novell, FourSquare e outros.
