SlideShare a Scribd company logo
1 of 21
Download to read offline
Scala: La escalera a la
Programación Funcional
1st June 2017 - Madrid
Ignacio Navarro Martín @inavarromartin
#OpenExpo2017
Scala Meetup @ Madrid
Presentación
Scala Meetup @ Madrid
Ignacio Navarro Martín @inavarromartin
#OpenExpo2017
https://scalaes-register.herokuapp.com/
Scala: 2 en 1
Scala 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
Scala: Más allá de Java
Scala 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.
Scala: Programación Funcional
Scala 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
La P. Funcional es cool
Scala Meetup @ Madrid
Ignacio Navarro Martín @inavarromartin
#OpenExpo2017
Scala está en todas partes
Scala Meetup @ Madrid
Ignacio Navarro Martín @inavarromartin
#OpenExpo2017
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
Ecosistema Scala
Scala Meetup @ Madrid
Ignacio Navarro Martín @inavarromartin
#OpenExpo2017
● El ecosistema Scala es muy maduro y grande
Monix
MacWire
F.P. vs O.O.P
Scala 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
Ventajas de la PF
Scala Meetup @ Madrid
Ignacio Navarro Martín @inavarromartin
#OpenExpo2017
● La programación funcional nos permite hacer:
○ Programas testeables
○ Componibles
○ Concurrentes
○ Modulares
○ Correctos
○ ...
Funciones
Scala 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
Función orden superior I
Scala 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
}
Función orden superior II
Scala 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
}
Inmutabilidad
Scala 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
Funciones Puras I
Scala 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
Funciones Puras II: Side effects
Scala 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
}
Funciones Puras III
Scala 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
}
Currying
Scala 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)
Abstracción y composición
Scala Meetup @ Madrid
Ignacio Navarro Martín @inavarromartin
#OpenExpo2017
val fut:Future[Int] = future(2 + 3)
fut.map(x => s“El valor es $x”)
¡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/

More Related Content

Similar to Scala: La escalera a la Programación Funcional

Programación Funcional en JavaScript
Programación Funcional en JavaScriptProgramación Funcional en JavaScript
Programación Funcional en JavaScript
Javier Vélez Reyes
 

Similar to Scala: La escalera a la Programación Funcional (20)

MuleSoft Buenos Aires Meetup Introducción Dataweave
MuleSoft Buenos Aires Meetup Introducción DataweaveMuleSoft Buenos Aires Meetup Introducción Dataweave
MuleSoft Buenos Aires Meetup Introducción Dataweave
 
Meetup: Cómo monitorizar y optimizar procesos de Spark usando la Spark Web - ...
Meetup: Cómo monitorizar y optimizar procesos de Spark usando la Spark Web - ...Meetup: Cómo monitorizar y optimizar procesos de Spark usando la Spark Web - ...
Meetup: Cómo monitorizar y optimizar procesos de Spark usando la Spark Web - ...
 
Spark web meetup
Spark web meetupSpark web meetup
Spark web meetup
 
Introducción a scala
Introducción a scalaIntroducción a scala
Introducción a scala
 
Java8 : Más allá de las Expresiones Lambdas
Java8 :  Más allá de las Expresiones LambdasJava8 :  Más allá de las Expresiones Lambdas
Java8 : Más allá de las Expresiones Lambdas
 
TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2
 
Meetup Fun[ctional] spark with scala
Meetup Fun[ctional] spark with scalaMeetup Fun[ctional] spark with scala
Meetup Fun[ctional] spark with scala
 
Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016
 
Fun[ctional] spark with scala
Fun[ctional] spark with scalaFun[ctional] spark with scala
Fun[ctional] spark with scala
 
Curso basico c sharp
Curso basico c sharpCurso basico c sharp
Curso basico c sharp
 
Curso basico c sharp
Curso basico c sharpCurso basico c sharp
Curso basico c sharp
 
Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)
Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)
Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)
 
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
 
Los reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológicoLos reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológico
 
Herramientas BigData.pptx
Herramientas BigData.pptxHerramientas BigData.pptx
Herramientas BigData.pptx
 
Spark Hands-on
Spark Hands-onSpark Hands-on
Spark Hands-on
 
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casaTypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
 
Microsoft machine learning
Microsoft machine learningMicrosoft machine learning
Microsoft machine learning
 
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browserTypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
 
Programación Funcional en JavaScript
Programación Funcional en JavaScriptProgramación Funcional en JavaScript
Programación Funcional en JavaScript
 

Recently uploaded

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Recently uploaded (10)

How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 

Scala: La escalera a la Programación Funcional

  • 1. Scala: La escalera a la Programación Funcional 1st June 2017 - Madrid Ignacio Navarro Martín @inavarromartin #OpenExpo2017 Scala Meetup @ Madrid
  • 2. Presentación Scala Meetup @ Madrid Ignacio Navarro Martín @inavarromartin #OpenExpo2017 https://scalaes-register.herokuapp.com/
  • 3. Scala: 2 en 1 Scala 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
  • 4. Scala: Más allá de Java Scala 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.
  • 5. Scala: Programación Funcional Scala 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
  • 6. La P. Funcional es cool Scala Meetup @ Madrid Ignacio Navarro Martín @inavarromartin #OpenExpo2017
  • 7. Scala está en todas partes Scala Meetup @ Madrid Ignacio Navarro Martín @inavarromartin #OpenExpo2017
  • 8. 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
  • 9. Ecosistema Scala Scala Meetup @ Madrid Ignacio Navarro Martín @inavarromartin #OpenExpo2017 ● El ecosistema Scala es muy maduro y grande Monix MacWire
  • 10. F.P. vs O.O.P Scala 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
  • 11. Ventajas de la PF Scala Meetup @ Madrid Ignacio Navarro Martín @inavarromartin #OpenExpo2017 ● La programación funcional nos permite hacer: ○ Programas testeables ○ Componibles ○ Concurrentes ○ Modulares ○ Correctos ○ ...
  • 12. Funciones Scala 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
  • 13. Función orden superior I Scala 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 }
  • 14. Función orden superior II Scala 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 }
  • 15. Inmutabilidad Scala 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
  • 16. Funciones Puras I Scala 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
  • 17. Funciones Puras II: Side effects Scala 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 }
  • 18. Funciones Puras III Scala 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 }
  • 19. Currying Scala 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)
  • 20. Abstracción y composición Scala Meetup @ Madrid Ignacio Navarro Martín @inavarromartin #OpenExpo2017 val fut:Future[Int] = future(2 + 3) fut.map(x => s“El valor es $x”)
  • 21. ¡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/