Scala (linguagem de programação)
-
Nota: Este artigo é sobre a linguagem de programação. Para outros significados, veja Scala.
| Scala | |
|---|---|
| Paradigma | Orientação a objetos Programação funcional Programação imperativa |
| Surgido em | 2001 |
| Última versão | 2.8.1 (9 de novembro de 2010) |
| Versão em teste | {{{versao_beta}}} () |
| Criado por | Martin Odersky |
| Estilo de tipagem: | estática, forte, implícita |
| Compiladores | |
| Dialetos: | |
| Influenciada por | Erlang, Haskell, Java, Objective Caml, Pizza, Scheme, Smalltalk, Standard ML |
| Influenciou | Fantom |
| Licença: | Licença BSD |
| Página oficial | www.scala-lang.org |
Scala (Scalable language) é uma linguagem de programação de propósito geral, diga-se multiparadigma, projetada para expressar padrões de programação comuns de uma forma concisa, elegante e type-safe. Ela incorpora recursos de linguagens orientadas a objetos e funcionais. Também é plenamente interoperável com Java. Scala é a sucessora de Funnel, uma linguagem baseada em join calculus. Scala é software de código aberto. Requer JDK versão 1.4 ou superior.[1]
[editar] Plataforma
Scala é similar a linguagem de programação Java, e roda na Java Virtual Machine, é compatível com programas java existentes. Uma implementação alternativa existe para a plataforma .NET, mas a plataforma base é mesmo para Java Scala é primariamente desenvolvida para a JVM e encorpora algumas de suas características. De qualquer forma, o suporte a .NET foi criado para deixá-la tão portátil entre duas plataformas o quanto possível. Scala ainda pode ser executada no Java Platform, Micro Edition Connected Limited Device Configuration.
[editar] História
Scala foi inventada na École Polytechnique Fédérale de Lausanne (EPFL), Lausana na Suíça, em 2001 por Martin Odersky. Foi liberada publicamente na plataforma Java em janeiro de 2004, e na plataforma .NET em junho do mesmo ano. Uma segunda versão da linguagem foi liberada em Março de 2006. Em italiano, Scala significa uma escada, ou etapas, na verdade, Scala permite que você passe a ter um ambiente de programação que inclui algumas das melhores linguagens recentes e a pensar na linguagem de programação com outra concepção, ao mesmo tempo, permitindo-lhe utilizar todo o seu código Java existente.
[editar] Características da orientação a objetos
Scala é puramente orientada-a-objetos no sentido de todo o valor ser um Objeto. Tipos e comportamento dos objetos são descritos pelas classes e traços. Abstrações de classes são estendidas por "subclassing" e um flexível mecanismo de "mixin-based composition" como uma forma "limpa" de substituição a heranças múltiplas.
[editar] Programação funcional
Scala é também uma linguagem funcional, no sentido de cada função ser um valor. Scala fornece uma sintaxe "leve" para definição de funções anônimas, ela suporta higher-order functions, ela permite que funções sejam aninhadas, e suporta currying. Classes Scala e seu suporte interno para pattern matching modela tipos algébricos usados em muitas linguagens de programação funcionais. Além disso, sua noção de "pattern matching" natural é estendida para o processamento de arquivos XML com a ajuda de expressões regulares. Neste contexto, a linguagem se torna de grande valia para o processamento de sintaxes futuras. Estas características, fazem com que o Scala seja ideal para o desenvolvimento de aplicações como web services. Segue abaixo uma implementação do algoritmo Quicksort em estilo funcional, para comparação com o Erlang Quicksort example:
def qsort(l: List[Int]): List[Int] = { l match { case List() => l case _ => qsort(for(x <- l.tail if x < l.head) yield x) ::: List(l.head) ::: qsort(for(x <- l.tail if x >= l.head) yield x) } }
[editar] Tipagem estática
O Scala é equipado com um sistema de tipos expressivo, que reforça estaticamente que abstrações sejam usadas de maneira segura e coerente. Em particular, o sistema de tipos suporta:
- programação genérica,
- anotações de variância,,
- superior e inferior tipo acoplado
- classes e enumeração (tipo de dado)
- tipo composto
- auto referencia
- métodos polimórficos.
[editar] Extensibilidade
O design do Scala, reconhece o fato de, na prática, o desenvolvimento de aplicações de domínio-específico requerem extensões a linguagens de domínio-específico. O Scala fornece uma combinação única de mecanismos de linguagem, que possibilitam a adição de construções na forma de bibliotecas, e com boa facilidade:
- qualquer método pode ser usado como um operador prefixo ou sufixo
- closures são construídas automaticamente dependendo do tipo esperado (target typing).
A junção das duas características, facilita a definição de novos "statements" sem estender a sintaxe e sem usar a mágica da meta-programação.
[editar] Independência de plataforma
Scala foi projetado para interoperar bem com ambientes de programação populares, tais como Java 2 Runtime Environment (JRE) e .NET CLR. Em particular, a inteiração com linguagens orientadas-a-objeto, Java e C# por exemplo, é a mais robusta quanto possível. Em outras palavras, Scala pode sem muito esforço fazer uso de todas as "libraries" disponíveis para Java/C#, endereçando o comun inconveniente de usar avançadas linguagens funcionais, usadas por uma pequena comunidade, em sua maioria centrada academicamente, frequentemente não oferecendo "libraries" de muita qualidade, no sentido de uso em tarefas do mundo real, do tipo acesso a bancos de dados relacionais, processamento XML, expressões regulares, e etc. Scala pode realizar estas tarefas de uma maneira muito similar a qual é feita em Java ou C#. Scala tem o mesmo modelo de compilação (compilação separada, carregamento dinâmico de classe) de Java e C#, e adiciona milhares de "libraries" de alta qualidade que podem ser acessadas.
[editar] Programa Olá Mundo
Aqui está o programa "Olá Mundo" escrito em Scala:
object OlaMundo { def main(args: Array[String]) { println("Olá, Mundo!") } }
ou
object OlaMundo extends Application { println("Olá, Mundo!") }
Note como ele é bem similar com a sintaxe Java. A diferença mais notável é que não declaramos nada como static ou void; a palavra-chave object nos dá o objeto Singleton, nos livrando da necessidade de invocar qualquer outro construtor.
A linha seguinte invoca o compilador, assumindo que foi salvo como OlaMundo.scala:
> scalac OlaMundo.scala
E executa desta maneira:
> scala -classpath . OlaMundo
A compilação e execução deste modelo é idêntica ao Java, fazendo com que as ferramentas de automação (build) sejam compatíveis, como o Ant.
[editar] Exemplos de sintaxe
A condição IF sempre em ternários:
val x = 30 val y = 15 val maximo = if (x > y) x else y maximo: Int = 30
O FOR pode retornar valor:
val lista = lista(1, 2, 3, 4) val par = for { i <- lista if (i % 2 == 0) } yield i par: lista[Int] = lista(2, 4)
[editar] Testando
Existem atualmente duas maneiras de testar código no Scala:
- A própria scala-library fornece SUnit, um xUnit como framework usando Assertions.
- No endereço Rehersal encontra-se o projeto que fornece um framework mais extensivo usando Expectations e linguagem natural para testar nomes. Ele também é integrado com o Apache Ant.
- No endereço [1] encontra-se o compilador Eclipse onde pode ser feito um download, no menu ferramentas "HELP" do eclipse instale novos softwares digitando o endereço [Scala Update Site - http://www.scala-lang.org/scala-eclipse-plugin], e assim fazer os testes de programas em Scala.
[editar] Exemplo Números Perfeitos
object Numeros_Perfeitos { def main(args: Array[String]) = { println("------NÚMEROS PERFEITOS------") println("\nUm número se diz perfeito se eh igual a soma de seus divisores próprios." ) println("Divisores próprios de um número positivo N são todos os divisores inteiros") println("positivos de N exceto o próprio N. ") println("Por exemplo, o número 6, seus divisores próprios são 1, 2 e 3, cuja soma = 6. ") println("--> 1 + 2 + 3 = 6 ") println("Outro exemplo é o numero 28, cujos divisores próprios são 1, 2, 4, 7 e 14,") println("e a soma dos seus divisores próprios é 28. ") println("--> 1 + 2 + 4 + 7 + 14 = 28 ") var cont, x, soma, t: Int=0 var n = 4 // n = ao número de números perfeitos que irão ser achados println("\n\nPrograma mostra os 4 primeiros números perfeitos\n") while (cont != n) { x += 1 soma = 0 for (i <- 1 to x - 1) { t = x % i if(t == 0) { soma += i } } if (soma == x) { println(x) cont += 1 } } } }
Referências
- ↑ Martin Odersky et al, An Overview of the Scala Programming Language, 2nd Edition
[editar] Bibliografia
- ODERSKY, Martin; SPOON, Lex; VENNERS, Bill. Programming in Scala. Mountain View: Artima, 2008. 736 p. ISBN: 0-9815316-0-1
[editar] Ver também
| A Wikipédia possui o portal: Tecnologias de informação {{{Portal2}}}
{{{Portal3}}}
{{{Portal4}}}
{{{Portal5}}}
|
- Groovy é uma linguagem orientada a objetos, alternativa dentro da plataforma Java.
- Jython - Implmentação em Java de Python.