Scala (linguagem de programação)

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Searchtool.svg
Esta página ou secção foi marcada para revisão, devido a inconsistências e/ou dados de confiabilidade duvidosa. Se tem algum conhecimento sobre o tema, por favor verifique e melhore a consistência e o rigor deste artigo. Pode encontrar ajuda no WikiProjeto Ciência da computação.

Se existir um WikiProjeto mais adequado, por favor corrija esta predefinição. Este artigo está para revisão desde dezembro de 2010.

Question book.svg
Esta página ou secção não cita nenhuma fonte ou referência, o que compromete sua credibilidade (desde outubro de 2010).
Por favor, melhore este artigo providenciando fontes fiáveis e independentes, inserindo-as no corpo do texto por meio de notas de rodapé. Encontre fontes: Googlenotícias, livros, acadêmicoScirus. Veja como referenciar e citar as fontes.
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]

Índice

[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

  1. 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

Portal 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.

[editar] Ligações externas

Ferramentas pessoais
Espaços nominais

Variantes
Ações
Navegação
Colaboração
Imprimir/exportar
Ferramentas
Noutras línguas