Agenda
¿Por dónde empezar?
Features de scala – OO & Funcional
OO Features – Scala Vs. Java
Funcional features de Scala
¿Qué es Scala?
Slide 3
Slide 3 text
¿Qué es Scala?
Lenguaje de propósito general
Martin Odersky → Escuela Politécnica de Lausanne → 2001
Unifica características de paradigma OO y funcional
Typesafe Inc. → 2011
1ª versión → finales 2003
2ª versión → Marzo 2006
Features de Scala
OO FUNCIONAL
→ Clases
→ Case Classes
→ Traits
→ Herencia múltiple
→ Objects
→ Companion Objects
→ Implícitos
→ Funciones puras
→ Inmutabilidad
→ Pattern Matching
→ Funciones de orden
superior
→ List API
→ Laziness
→ For-comprehension
Slide 6
Slide 6 text
Clases
Vs.
Slide 7
Slide 7 text
Case Classes
Vs.
Slide 8
Slide 8 text
Traits
Vs.
Slide 9
Slide 9 text
Herencia múltiple – Diamond problem
Vs.
Slide 10
Slide 10 text
Traits – Ejemplos prácticos
Creando fake objects para test unitarios
Slide 11
Slide 11 text
Traits – Ejemplos prácticos
Extendiendo traits – ejemplo cache
Muy bonito pero... nuestro usuario quiere que la cache se refresque
después de un tiempo determinado para reflejar los cambios
To trait or not to trait
Una clase puede extender sólo de una superclase pero puede
“mix-in” todos los traits que quiera => mixin-class composition
Traits no admiten parámetros en su constructor (sólo type parameters)
Si queremos “fully-interoperability” con Java => abstract class
Si va a ser reutilizada en múltiples y no-relacionadas clases => trait
Si aún asi dudas....
Usa traits!!!
Slide 15
Slide 15 text
Objects
Vs.
Slide 16
Slide 16 text
Companion Objects
Declarar métodos y variables estáticas de nuestras clases
Declarar el método unapply que se invocara al hacer pattern
matching sobre la clase
Declarar el método apply que se usa típicamente como un Factory method
Lenguajes funcionales
Origen en el cálculo lambda → Sistema formal para investigar
definición de funciones, aplicación de funciones y recursión
Funciones que producen resultados que dependen sólo de sus
“inputs” no del estado del programa
Eliminar efectos de lado → hacen más fácil de entender los
programas y comprender su comportamiento
Higher-order functions
Funciones que:
* Toma una o mas funciones como parámetros
y/o
* Tiene una función como salida
Slide 25
Slide 25 text
Higher-order functions
Ejemplo Set
Slide 26
Slide 26 text
List API
filter, filterNot, find, flatMap, foldLeft, foldRight, forAll, foreach, groupBy...
Slide 27
Slide 27 text
Conclusiones
Funcional + OO > Solo OO
Lenguaje expresivo y flexible (arma doble-filo)
JVM
Mejora las habilidades del programador
Migración progresiva desde Java
Comunidad y ecosistema cada vez más potente