Slide 1

Slide 1 text

Introducción a Scala Luca Rosellini

Slide 2

Slide 2 text

¿qué es Scala? • Lenguaje para la JVM • Orientado a objetos o Todo es un objeto • No existen tipos primitivos o Tipado estático • Funcional • Conciso • Extensible o Núcleo del lenguaje muy pequeño o Standard library muy extensa

Slide 3

Slide 3 text

¿quién usa Scala? o Twitter: el backend fue re-implementado en Scala para solucionar problemas de escalabilidad. o Foursquare o LinkedIn o Siemens o …

Slide 4

Slide 4 text

Jerarquía de clases

Slide 5

Slide 5 text

Variables • var: se usa para variables reasignables • val: se usa para variables no reasignables [val|var] nombre [: tipo] = • El tipo es opcional o type inference

Slide 6

Slide 6 text

Funciones (I) • First-class values • Son objetos • No se invocan, se “aplican”. • Definición: def nombrefun(arg: Tipo, ... ) [: Tipo] = { // cuerpo de la función }

Slide 7

Slide 7 text

Funciones (II) • Sintaxis de invocación: 1. reference.nombreFun(args) 2. reference nombreFun(args) 3. reference nombreFun { arg } 4. reference nombreFun arg

Slide 8

Slide 8 text

Funciones (III) • Tipos de llamada: o By value: cuando el parámetro hereda de AnyVal o By reference: cuando el parámetro hereda de AnyRef o By name (o by need): cuando queremos que el parámetro se evalúe solo cuando se accede a el.

Slide 9

Slide 9 text

Una función “curried” es una función “aplicada” a dos conjuntos de argumentos: def multiplicaElementos(a: Double, b: Double) = a*b Funciones (Currying) Equivale a función anónima def multiplicaElementos(a: Double) = (b:Double) => a*b Aplico el “currying” def multiplicaElementos(a: Double)(b: Double) = a*b

Slide 10

Slide 10 text

Clases Java: public class Complex { private Double real; private Double imag; public Complex(Double real, Double imag){ //... } public Double getReal(){ return real; } public Double getImag(){ return imag; } public void setReal(Double real){ //... } public void setImag(Double imag){ //... } } Scala: class Complex (var real:Double, var imag:Double)

Slide 11

Slide 11 text

Objects y Companion Objects • Singletons • Contienen solo métodos “static” • Los object se pueden “aplicar” o funcionalidad genérica en Scala • metodo “apply” o Se pueden usar para crear métodos de factoría

Slide 12

Slide 12 text

Case classes • Usando la palabra clave “case” en fase de definición de una clase, ej: case class Complex(real:Double, imaginary: Double) • el sistema automáticamente crea: o equals y hashCode o toString o getters/setters para todos los campos: • si no se especifica val/var trata los parámetros como vals y no genera el setter o un companion object con un método de factoría

Slide 13

Slide 13 text

Traits (o Mixins) • Son el correspondiente en Scala de las interfaces en Java • Permiten implementar métodos (como en las clases abstractas en Java) • Permiten realizar herencia múltiple o Type linearization • Permiten “decorar” clases existentes, añadiéndoles otras funcionalidades

Slide 14

Slide 14 text

Pattern Matching • Generalización de un switch en Java • Permite hacer “switch” sobre cualquier tipo • Permite extraer información desde objetos expression match { case c_expression1 [guard] => … case c_expression2 [guard] => … … case _ => // default }

Slide 15

Slide 15 text

Actors (I) • Librería de programación concurrente • Independiente de Scala como lenguaje: utilizable desde Java • Modelo de programación concurrente basado en intercambio de mensajes • Las entidades que “actúan” en este modelo se definen “actores” (trait scala.actors._)

Slide 16

Slide 16 text

Actors (II) • La comunicación entre actores se realiza por medio de: o send: se envía un mensaje a un actor invocando su método “!”, ejemplo: a ! msg o receive/react: se implementa usando pattern matching para determinar lo que se ha recibido y para extraer información desde el mensaje receive { case msg => // .. }

Slide 17

Slide 17 text

Referencias • “Programming in Scala second edition” de Martin Odersky, Lex Spoon, Bil Venners • “Scala by example” de Martin Odersky • Scaladoc: http://www.scala-lang.org/api/current/index.html • A tour of Scala: http://www.scala-lang.org/node/104 • “Scala in Action” MEAP de Nilanjan Raychaudhuri