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
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.
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
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
Permite hacer “switch” sobre cualquier tipo • Permite extraer información desde objetos expression match { case c_expression1 [guard] => … case c_expression2 [guard] => … … case _ => // default }
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._)
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 => // .. }
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