¿Qué es Scala?

¿Qué es Scala?
El nombre de Scala viene de “scalable” y “language”, esto indica cual es el propósito de este lenguaje. Scala se trata de un lenguaje de programación multi-paradigma, combina características de los lenguajes funcionales y de los lenguajes orientados a objetos. En otros lenguajes los objetos y las funciones son dos conceptos distintos, pero en Scala son dos conceptos entrelazados, por ejemplo, una función valor es un objeto. Este aspecto es muy útil para mejorar las escalabilidad de las aplicaciones.

Scala permite desarrollar programas con una sintaxis más limpia y concisa con lo que se crearán programas más cortos, reduciendo considerablemente el número de líneas de código si se compara con Java. Por ejemplo:

}
[/crayon]

Otra de las características de este lenguaje que posee un tipado estático (exactamente igual que Java), pero a pesar de ésto el compilador infiere los tipos donde es posible, por lo que una gran parte del código es similar al de los lenguajes con tipado dinámico.

Cuando se compila un programa se transforma en en bytcodes, ejecutandose sobre la máquina virtual de Java, lo que permite utilizar características o librerías de Java dentro de un programa en Scala, por ejemplo, invocar métodos Java, seleccionar campos Java, heredar de clases Java, implementar interfaces Java, etc. A su vez, el código Java también puede usar fácilmente código Scala.

Otro concepto interesante que posee Scala es que permite ejecutar programas tanto en modo compilado como en modo scripting.

Scala Orientado a Objetos
Scala es un lenguaje orientado a objetos puro, donde todo es un objeto y todas las operación se realizan mediante una llamada a un método. Pero mientras Java tiene excepciones como los tipos primitivos o los statics, Scala no pose dichas excepciones.

En la programación orientada a objetos la composición y la herencia son los dos mecanismos básicos de rehúso. Scala ofrece un soporte excelente para el diseño correcto de los principios de abstracción fundamentales de la programación orientada a objetos: Clasificación/Instanciación, Agregación/Descomposición, Generalización/Especialización y Agrupamiento/Individualización.

Scala añade algunas características en la programación orientadas a objetos que no posee Java:

  • Composición modular de mixin. Este mecanismo que permite la composición de clases para el diseño de componentes reutilizables evitando los problemas presentados por la herencia múltiple. Similar a los interfaces Java y las clases abstractas. Por una parte se pueden definir múltiples “contratos” (del mismo modo que los interfaces). Por otro lado, se podrían tener implementaciones concretas de los métodos.
  • Self-type. Los mixin no dependen de ningún método y/o atributo de aquellas clases con las que se está entremezclando aunque en determinadas ocasiones será necesario hacer uso de las mismas. Esta capacidad es conocida en Scala como self-type.
  • Abstracción de tipos. Existen dos mecanismos principales de abstracción en los lenguajes de programación: la parametrización y los miembros abstractos. Scala soporta ambos estilos de abstracción de manera uniforme para tipos y valores.

Scala Funcional
Scala es un lenguaje funcional en el sentido de que cada función es un valor. Las funciones pueden ser anónimas, anidadas, aplicadas parcialmente (currying). Muchas funciones útiles de orden superior son implementadas como métodos de clases de Scala.

El soporte de Scala nos ayuda a resolver muchos problemas pensando en términos de transformar entrada en salida, evitando muchos problemas asociados con los efectos laterales y el cambio de estado, típicos de la programación imperativa.

Todos los lenguajes funcionales incluyen pattern matching y Scala mezcla muy bien el pattern matching típico de la programación funcional con los conceptos orientados a objetos (clases case y otras cosas) para brindar un mecanismo muy poderoso para escribir correctamente la lógica de negocio de nuestras aplicaciones.

Los Actores
Para muchos, la programación concurrente es la siguiente revolución en la forma que escribimos software. Java y otros lenguajes dan soporte a un modelo de concurrencia basado en técnicas de sincronización por condición y exclusión mutua, adecuadas para muchas aplicaciones pero inadecuadas para otras.

Otros modelos de concurrencia han existido desde hace muchos años y uno de ellos es el conocido como el modelo de actores basado en la inexistencia de regiones críticas por estados compartidos entre hilos o procesos, y usando intercambio de mensajes entre los componentes del sistema para resolver problemas de computación concurrente.

Scala adopta un enfoque completamente diferente a la problemática de la concurrencia: el modelo basado en actores. Un actor es un modelo matemático de computación concurrente en el que se encapsulan datos, código y su propio hilo de control, comunicándose de manera asíncrona mediante técnicas de paso de mensajes inmutables. La arquitectura base de este modelo está basada en políticas de compartición cero y componentes ligeros.

Conclusión
Según indeed.com la demanda de puestos de trabajo que solicitan Scala como lenguaje de programación. Parece que grandes empresas com Twitter, que en el año 2009 migró su backend de Ruby a Scala, Foursquare, desarrollada integramente en Scala y Lift (web framework para Scala) han adoptado este lenguaje de programación. Parece tener buena aceptación en los paises anglosajones y puede ser un lenguaje importante en el futuro. ¿Cuál es vuestra opinión?¿Le ves un futuro importante a Scala?

Página Oficial Scala: http://www.scala-lang.org/
Documentación Scala: http://docs.scala-lang.org/index.html
Plugin Eclipse: http://scala-ide.org/