Scala es un lenguaje de programación moderno multi-paradigma diseñado para expresar patrones de programación comunes de una forma concisa, elegante, y con tipado seguro. Integra fácilmente características de lenguajes orientados a objetos y funcionales.
Scala es orientado a objetos
Scala es un lenguaje puramente orientado a objetos en el sentido de que todo es un objeto. Los tipos y comportamientos de objetos son descritos por clases y traits (que podría ser traducido como un “rasgo”). Las clases pueden ser extendidas a través de subclases y un mecanismo flexible de composición mezclada que provee un claro remplazo a la herencia múltiple.
Scala es funcional
Scala es también un lenguaje funcional en el sentido que toda función es un valor. Scala provee una sintaxis ligera para definir funciones anónimas. Soporta funciones de orden superior, permite funciones anidadas, y soporta currying. Las clases Case de Scala y las construcciones incorporadas al lenguaje para reconocimiento de patrones modelan tipos algebraicos usados en muchos lenguajes de programación funcionales.
Además, la noción de reconocimiento de patrones de Scala se puede extender naturalmente al procesamiento de datos XML con la ayuda de patrones de expresiones regulares. En este contexto, la compresión de bucles for
resultan útiles para formular consultas. Estas características hacen a Scala un lenguaje ideal para desarrollar aplicaciones como Web Services.
Scala estáticamente tipado
Scala cuenta con un expresivo sistema de tipado que fuerza estáticamente las abstracciones a ser usadas en una manera coherente y segura. En particular, el sistema de tipado soporta:
- Clases genéricas
- anotaciones variables,
- límites de tipado superiores e inferiores,
- clases internas y tipos abstractos como miembros de objetos,
- tipos compuestos
- auto-referencias explicitamente tipadas
- implicit conversions
- métodos polimórficos
El mecanismo de inferencia de tipos locales se encarga de que el usuario no tenga que anotar el programa con información redundante de tipado. Combinadas, estas características proveen una base poderosa para la reutilización segura de abstracciones de programación y para la extensión segura (en cuanto a tipos) de software.
Scala es extensible
En la práctica, el desarrollo de aplicaciones específicas para un dominio generalmente requiere de “Lenguajes de dominio específico” (DSL). Scala provee una única combinación de mecanismos del lenguaje que simplifican la creación de construcciones propias del lenguaje en forma de bibliotecas:
- cualquier método puede ser usado como un operador de infijo o postfijo
El uso conjunto de ambas características facilita la definición de nuevas sentencias sin tener que extender la sintaxis y sin usar facciones de meta-programación como tipo macros.
Scala interopera
Scala está diseñado para interoperar correctamente con la popular Java Runtime Environment (JRE). En particular, es posible la misma interacción con el lenguaje de programación Java. Nuevas características de Java como SAMs, lambdas, anotaciones, y clases genéricas tienen sus análogos en Scala.
Aquellas características de Scala que no tienen analogías en Java, como por ejemplo parámetros por defecto y parámetros con nombre, compilan de una forma tan similar a Java como es razonablemente posible. Scala tiene el mismo modelo de compilación (compilación separada, carga de clases dinámica) que Java y permite acceder a miles de bibliotecas de alta calidad ya existentes.
¡Disfruta el tour!
Por favor continúe a la próxima página para conocer más.
Contributors to this page:
Contents
- Introducción
- Basics
- Tipos Unificados
- Clases
- Valores de parámetros por defecto
- Parámetros nombrados
- Traits
- Tuples
- Composición de clases mixin
- Funciones de orden superior
- Funciones Anidadas
- Currying
- Clases Case
- Reconocimiento de patrones
- Singleton Objects
- Patrones basados en expresiones regulares
- Objetos Extractores
- For Comprehensions
- Clases genéricas
- Varianzas
- Límite de tipado superior
- Límite de tipado inferior
- Clases Internas
- Tipos Abstractos
- Tipos Compuestos
- Autorefrencias explicitamente tipadas
- Parámetros implícitos
- Implicit Conversions
- Métodos polimórficos
- Inferencia de tipos Local
- Operadores
- By-name Parameters
- Anotaciones
- Packages and Imports
- Package Objects