Slide 1

Slide 1 text

Introducción a Scala

Slide 2

Slide 2 text

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

Slide 4

Slide 4 text

¿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/

Slide 5

Slide 5 text

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

Slide 12

Slide 12 text

Traits – Ejemplos prácticos Extendiendo traits – ejemplo cache

Slide 13

Slide 13 text

Traits – Ejemplos prácticos Apilando traits

Slide 14

Slide 14 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Paradigma funcional

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

Funciones puras Funciones sin efecto de lado

Slide 21

Slide 21 text

Inmutabilidad Val vs Var

Slide 22

Slide 22 text

Inmutabilidad 0 + 1 0 0 1 1 + 2 2 3 + 3 3 … 45 + 10 10

Slide 23

Slide 23 text

Pattern Matching “Mighty” switch

Slide 24

Slide 24 text

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

Slide 28

Slide 28 text

Futuro de Scala?