Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introducción a Scala

Introducción a Scala

Seminario de Paradigma Tecnologico y Javahispano impartido por Luca Rosellini el 12 de abril de 2012
Mas información:

Paradigma

April 12, 2012
Tweet

More Decks by Paradigma

Other Decks in Technology

Transcript

  1. ¿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
  2. ¿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 …
  3. Variables • var: se usa para variables reasignables • val:

    se usa para variables no reasignables [val|var] nombre [: tipo] = <expresión> • El tipo es opcional o type inference
  4. Funciones (I) • First-class values • Son objetos • No

    se invocan, se “aplican”. • Definición: def nombrefun(arg: Tipo, ... ) [: Tipo] = { // cuerpo de la función }
  5. Funciones (II) • Sintaxis de invocación: 1. reference.nombreFun(args) 2. reference

    nombreFun(args) 3. reference nombreFun { arg } 4. reference nombreFun arg
  6. 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.
  7. 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
  8. 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)
  9. 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
  10. 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
  11. 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
  12. 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 }
  13. 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._)
  14. 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 => // .. }
  15. 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