Introducción a scala
-
Upload
paradigma-tecnologico -
Category
Technology
-
view
480 -
download
2
description
Transcript of Introducción a scala
Introducción a Scala
Agenda
¿Por dónde empezar?
Features de scala – OO & Funcional
OO Features – Scala Vs. Java
Funcional features de Scala
¿Qué es Scala?
¿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
¿Por dónde empezar? Read-eval-print loop (REPL):
Simple Build Tool (sbt) http://www.scala-sbt.org/
giter8 (g8) https://github.com/n8han/giter8
Integración con IDEs:
- Intellij: https://github.com/mpeltonen/sbt-idea- Eclipse: https://github.com/typesafehub/sbteclipse
Scala school: http://twitter.github.io/scala_school/
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
Clases
Vs.
Case Classes
Vs.
Traits
Vs.
Herencia múltiple – Diamond problem
Vs.
Traits – Ejemplos prácticos
Creando fake objects para test unitarios
Traits – Ejemplos prácticosExtendiendo traits – ejemplo cache
Muy bonito pero... nuestro usuario quiere que la cache se refresque después de un tiempo determinado para reflejar los cambios
Traits – Ejemplos prácticosExtendiendo traits – ejemplo cache
Traits – Ejemplos prácticos
Apilando traits
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!!!
Objects
Vs.
Companion ObjectsDeclarar 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
Implícitos
defs
class
scala> id(“3”) → returns “3”scala> id(3) → id(fromIntToString(3)) → returns “3”
scala> 4.duplicateInt → new IntHelper(4).duplicateInt → returns 8
Paradigma funcional
Lenguajes funcionales
Origen en el cálculo lambda → Sistema formal para investigardefinició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 losprogramas y comprender su comportamiento
Funciones puras
Funciones sin efecto de lado
Inmutabilidad
Val vs Var
Inmutabilidad
0 + 1
00
11 + 2
23 + 3
3
… 45 + 1010
Pattern Matching
“Mighty” switch
Higher-order functions
Funciones que:
* Toma una o mas funciones como parámetros
y/o
* Tiene una función como salida
Higher-order functions
Ejemplo Set
List API
filter, filterNot, find, flatMap, foldLeft, foldRight, forAll, foreach, groupBy...
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
Futuro de Scala?