Una visión general de Scala

Por Cristian Barrientos.

Cristian Barrientos

El nombre Scala significa "lenguaje escalable". El lenguaje se llama así porque fue diseñado para crecer con las demandas de sus usuarios. Se puede aplicar Scala a una amplia gama de tareas de programación, desde escribir pequeños scripts hasta construir grandes sistemas.

Es fácil empezar en Scala. Se ejecuta en la plataforma Java estándar e interactúa a la perfección con todas las librerías de Java. Es un lenguaje bastante bueno para escribir scripts que reúnen componentes de Java. Pero puede aplicar sus fortalezas aún más cuando se usa para construir grandes sistemas y estructuras de componentes reutilizables.

Técnicamente, Scala es una combinación de conceptos de programación orientados a objetos y funcionales en un lenguaje tipificado estáticamente. La fusión de la programación orientada a objetos y funcional se muestra en muchos aspectos diferentes de Scala; es probable que sea más generalizado que en cualquier otro lenguaje ampliamente utilizado. Los dos estilos de programación tienen fortalezas complementarias cuando se trata de escalabilidad. Las construcciones de programación funcional de Scala facilitan la construcción rápida de cosas interesantes a partir de piezas simples. Sus construcciones orientadas a objetos hacen que sea fácil estructurar sistemas más grandes y adaptarlos a las nuevas demandas. La combinación de ambos estilos en Scala permite expresar nuevos tipos de patrones de programación y abstracciones de componentes que también conducen a un estilo de programación legible y conciso.

Clases.

Una clase es plano para objetos. Es decir, una vez se declara una clase, se dispone de un mecanismo para crear objetos a partir del plano que es la clase. 

Dentro de una definición de clase, se colocan campos y métodos, que se denominan colectivamente miembros. Los campos, que se define con val o var, son variables que se refieren a objetos. Los métodos, que define con def, contienen código ejecutable. 

Los campos contienen el estado, o datos, de un objeto, donde los métodos usan esos datos para realizar el trabajo computacional del objeto. Cuando crea una instancia de una clase, el tiempo de ejecución aparta algo de memoria para mantener la imagen del estado de ese objeto (es decir, el contenido de sus variables).


Objetos.

Scala no tiene métodos ni campos estáticos. En su lugar, utiliza la construcción del objeto. Un objeto define una instancia única de una clase con las características que desea. 

Puede usarse un objeto en Scala cuando se quieran cumplir las siguientes necesidades: 

  • Como un centralizador para funciones de utilidad o constantes.

  • Cuando una única instancia inmutable se puede compartir de manera eficiente

  • Cuando se requiere una sola instancia para coordinar algún servicio (el patrón de diseño de singleton)


Tipos básicos.

En la siguiente tabla se muestran varios tipos fundamentales de Scala, junto con los rangos de valores que pueden tener las instancias de estos tipos. Colectivamente, los tipos Byte, Short, Int, Long y Char se denominan tipos integrales. Los tipos integrales más Flotante y Doble se denominan tipos numéricos.

Byte

Un entero de 8 bits con signo

Short

Un entero de 16 bits con signo

Int

Un entero de 32 bits con signo

Long

Un entero de 64 bits con signo

Char

Un caracter de 16 bits sin signo

String

Una secuencia de chars

Float

Un número de punto flotante de 32 bits tipo  IEEE-754

Double

Un número de punto flotante de 64 bits tipo  IEEE-754

Boolean

Falso o verdadero

Funciones.

La forma más común de definir una función es como miembro de algún objeto; Tal función se llama un método.

Scala tiene funciones de primera clase. No solo puede definir funciones y llamarlas, sino que puede escribir funciones como literales sin nombre y luego pasarlas como valores.

Aquí hay un ejemplo simple de una función literal que agrega uno a un número:


Traits.

Los Traits son una unidad fundamental de reutilización de código en Scala. Un Trait encapsula las definiciones de métodos y campos, que luego pueden reutilizarse mezclandolas en clases. A diferencia de la herencia de clase, en la que cada clase debe heredar de una sola superclase, una clase puede combinar cualquier número de Traits. Miremos cómo funcionan los Traits y dos de las formas más comunes en que son útiles: ampliar las interfaces y definir modificaciones apilables

Estructura Base:

La definición de un Trait es como la de una clase, solo que cambia la palabra reservada class por la palabra trait:

De esta forma podemos tener una clase que tenga esta función “philosophize” disponible dentro de sus miembros:

Colecciones.

Scala encapsula muchos de las estructuras de datos base de cualquier otro lenguaje de programación, principalmente la misma línea disponible dentro de java, pero es importante ver cómo Scala es diferente en este rasgo.

Scala tiene la siguiente estructura jerárquica de Traits respecto a las colecciones:



Un Iterable es cualquier colección que puede producir un Iterador con el que puede acceder a todos los elementos de la colección.

Scala posee Listas, Secuencias, Colas, Mapas, Arreglos, Sets, Rangos, Vectores y muchas más estructuras de datos ya disponibles dentro del lenguaje.

Futures.

Escribir aplicaciones concurrentes que funcionen correctamente y con un alto rendimiento es muy desafiante. El enfoque tradicional, en el que las tareas concurrentes tienen efectos secundarios que mutan los datos compartidos, es tedioso y propenso a errores. Scala nos impulsa a pensar en una computación de una manera funcional. 

Por ejemplo: Un cálculo produce un valor, en algún momento en el futuro. Siempre que los cálculos no tengan efectos secundarios, puede dejar que se ejecuten simultáneamente y combinar los resultados cuando estén disponibles.

El objeto scala.concurrent.Future puede ejecutar un bloque de código "en el futuro". Por ejemplo:


Comparte este post


 

  #IASSOFTWARE