Scala é uma linguagem de programação moderna e multi-paradigma desenvolvida para expressar padrões de programação comuns em uma forma concisa, elegante e com tipagem segura. Integra facilmente características de linguagens orientadas a objetos e funcional.
Scala é orientada a objetos
Scala é uma linguagem puramente orientada a objetos no sentido que todo valor é um objeto. Tipos e comportamentos de objetos são descritos por classes e traits. Classes são estendidas por subclasses e por um flexível mecanismo de composição mesclada como uma alternativa para herança múltipla.
Scala é funcional
Scala é também uma linguagem funcional no sentido que toda função é um valor. Scala fornece uma sintaxe leve para definir funções anônimas, suporta funções de primeira ordem, permite funções aninhadas, e suporta currying. As case classes da linguagem Scala e o suporte embutido para correspondência de padrões modelam tipos algébricos utilizados em muitas linguagens de programação funcional. Objetos Singleton fornecem uma alternativa conveniente para agrupar funções que não são membros de uma classe.
Além disso, a noção de correspondência de padrões em Scala se estende naturalmente ao processamento de dados de um XML com a ajuda de expressões regulares, por meio de uma extensão via objetos extratores. Nesse contexto, compreensões de sequência são úteis para formular consultas. Essas funcionalidades tornam Scala ideal para desenvolver aplicações como serviços web.
Scala é estaticamente tipada
Scala é equipada com um expressivo sistema de tipos que reforça estaticamente que abstrações são utilizadas de uma forma segura e coerente. Particularmente, o sistema de tipos suporta:
- Classes genéricas
- Anotações variáveis
- Limites de tipos superiores e limites de tipos inferiores,
- Classes internas e tipos abstratos como membros de um objeto
- Tipos compostos
- Auto referências explicitamente tipadas
- parâmetros implícitos e conversões implícitas
- métodos polimórficos
Um mecanismo de inferência de tipo local se encarrega para que o usuário não seja obrigado a anotar o programa com informações reduntante de tipos. Combinados, esses recursos fornecem uma base poderosa para a reutilização segura de abstrações de programação e para a extensão de tipos seguro do software.
Scala é extensível
Na prática, o desenvolvimento de aplicações de um determinado domínio geralmente requer uma linguagem de domínio específico. Scala fornece uma combinação única de mecanismos de linguagem que facilitam a adição suave de novas construções de linguagem na forma de bibliotecas:
- qualquer método pode ser utilizado como um operador infix ou postfix
Uma utilização conjunta de ambos os recursos facilita a definição de novas instruções sem estender a sintaxe e sem usar meta-programação como macros.
Scala é projetada para interoperar bem com o popular Java 2 Runtime Environment (JRE). Em particular, a interação com a linguagem de programação orientada a objetos Java é o mais suave possível. Funcionalidades novas do Java como annotations e Java generics têm correspondentes diretos em Scala. Esses recursos Scala sem correspondentes Java, como valor default de parâmetros e parâmetros nomeados, compilam de forma semelhante ao Java. Scala tem o mesmo modelo de compilação que Java (compilação separada, carregamento de classe dinâmica) e permite o acesso a milhares de bibliotecas de alta qualidade existentes.
Continue na próxima página para ler mais.
Contributors to this page:
Contents
- Introdução
- Basics
- Tipos Unificados
- Classes
- Parâmetro com Valor Padrão
- Parâmetros Nomeados
- Traits
- Tuplas
- Composição de Classes Mixin
- Funções de ordem superior
- Funções Aninhadas
- Currying
- Classes Case
- Correspondência de Padrões
- Objetos Singleton
- Padrões de Expressões Regulares
- Objetos Extratores
- For Comprehensions
- Classes Genéricas
- Variâncias
- Limitante Superior de Tipos
- Limitante Inferior de Tipos
- Classes Internas
- Tipos Abstratos
- Tipos Compostos
- Auto Referências Explicitamente Tipadas
- Parâmetros Implícitos
- Conversões Implícitas
- Métodos Polimórficos
- Inferência de Tipo Local
- Operadores
- By-name Parameters
- Anotações
- Packages and Imports
- Package Objects