21
Scala: La escalera a la Programación Funcional 1st June 2017 - Madrid Ignacio Navarro Martín @inavarromartin #OpenExpo2017 Scala Meetup @ Madrid

Scala: La escalera a la Programación Funcional

Embed Size (px)

Citation preview

Page 1: Scala: La escalera a la Programación Funcional

Scala: La escalera a la Programación Funcional

1st June 2017 - MadridIgnacio Navarro Martín @inavarromartin#OpenExpo2017

Scala Meetup @ Madrid

Page 2: Scala: La escalera a la Programación Funcional

PresentaciónScala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

https://scalaes-register.herokuapp.com/

Page 3: Scala: La escalera a la Programación Funcional

Scala: 2 en 1Scala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

Scala es un lenguaje multiparadigma (Funcional y Orientado a Objetos) que corre sobre la JVM (*)

(*) Si no contamos con ScalaJS y ScalaNative

Page 4: Scala: La escalera a la Programación Funcional

Scala: Más allá de JavaScala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

Scala contiene todo lo necesario para hacer orientación a objetos.

(*) Si no contamos con ScalaJS y ScalaNative

● Todo es un objeto● Acceso Unificado● “Herencia Multiple” (Traits y Resolución en

diamante)● Métodos● etc.

Page 5: Scala: La escalera a la Programación Funcional

Scala: Programación FuncionalScala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

● Higher-Order functions○ FunctionN, lambdas

● Inmutability○ val vs var○ lazy evaluation

● Algebraic data types○ case classes○ sealed classes (pattern matching)

● Type classes● Implicit classes & conversions● traits/mixins● Monads

○ Monad syntax: for-comprenhesion○ Type constructors

● Type-Level computing

Page 6: Scala: La escalera a la Programación Funcional

La P. Funcional es coolScala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

Page 7: Scala: La escalera a la Programación Funcional

Scala está en todas partes Scala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

Page 8: Scala: La escalera a la Programación Funcional

Scala y Java Scala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

● ¿Tienes Java? Entonces tienes Scala○ Tan fácil como añadir 1 plugin y 2 librerías en tu pom.xml

● Todo el ecosistema de Java a tu alcance

Page 9: Scala: La escalera a la Programación Funcional

Ecosistema ScalaScala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

● El ecosistema Scala es muy maduro y grande

Monix

MacWire

Page 10: Scala: La escalera a la Programación Funcional

F.P. vs O.O.PScala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

● La Programación Funcional y la Orientación a Objetos son ortogonales y Scala permite usar las ventajas de ambos.

● Los grandes rasgos de la PF son:○ Inmutabilidad○ Funciones de orden superior○ Funciones puras

Page 11: Scala: La escalera a la Programación Funcional

Ventajas de la PFScala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

● La programación funcional nos permite hacer:○ Programas testeables○ Componibles○ Concurrentes○ Modulares○ Correctos○ ...

Page 12: Scala: La escalera a la Programación Funcional

FuncionesScala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

● Una función recibe N parámetros y los convierte en un valor de salida

def sum(x: Int, y:Int): Int = x + y

Page 13: Scala: La escalera a la Programación Funcional

Función orden superior IScala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

● Una función de orden superior recibe otras funciones como parámetros

def people(connection: Connection): List[Person] =

{

val list = connection.select(”SELECT * FROM PEOPLE”)

list

}

Page 14: Scala: La escalera a la Programación Funcional

Función orden superior IIScala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

● Esta función sería testeable

def people(fun: String => Person): List[Person] =

{

val list = fun(”SELECT * FROM PEOPLE”)

list

}

Page 15: Scala: La escalera a la Programación Funcional

InmutabilidadScala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

● La inmutabilidad:● SOLID X 1000● No nos importa el estado● Staless

val list = List(1,2)

val newList = 1 :: list

Page 16: Scala: La escalera a la Programación Funcional

Funciones Puras IScala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

● Una función es pura si para el resultado de la misma solo depende de los parámetros de la entrada y no tiene efectos secundarios.

● Si un programa es puro permite la concurrencia.

● El estado compartido es la raíz de todo mal

Page 17: Scala: La escalera a la Programación Funcional

Funciones Puras II: Side effectsScala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

● Una efecto secundario produce un cambio sobre una variable fuera del scope de la misma.

def people(connection: Connection): List[Person] =

{

val list = connection.select(”SELECT * FROM PEOPLE”)

println(list)

list

}

Page 18: Scala: La escalera a la Programación Funcional

Funciones Puras IIIScala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

● Una efecto secundario produce un cambio sobre una variable fuera del scope de la misma.

val connection: Connection = DBConnection()

def people(): List[Person] =

{

val list = connection.select(”SELECT * FROM PEOPLE”)

list

}

Page 19: Scala: La escalera a la Programación Funcional

CurryingScala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

● La programación funcional nos permite hacer:

def sum(x: Int, y:Int): Int = x + y

def sum(x: Int)(y:Int): Int = x + y

def sum2(y:Int): Int = sum(2)_

sum2(3)

Page 20: Scala: La escalera a la Programación Funcional

Abstracción y composiciónScala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

val fut:Future[Int] = future(2 + 3)

fut.map(x => s“El valor es $x”)

Page 21: Scala: La escalera a la Programación Funcional

¡Gracias!Scala Meetup @ Madrid

Ignacio Navarro Martín @inavarromartin #OpenExpo2017

www.meetup.com/Scala-Programming-Madrid (@MadridScala)

● Conferencias○ LXScala (Lisboa)○ ScalaSwarm (Oporto)○ LambdaWorld (Cádiz)○ ScalaDays (Copenhague)

https://scalaes-register.herokuapp.com/