Date post: | 21-Jan-2018 |
Category: |
Technology |
Upload: | qindel-group |
View: | 145 times |
Download: | 0 times |
Scala: La escalera a la Programación Funcional
1st June 2017 - MadridIgnacio Navarro Martín @inavarromartin#OpenExpo2017
Scala Meetup @ Madrid
PresentaciónScala Meetup @ Madrid
Ignacio Navarro Martín @inavarromartin #OpenExpo2017
https://scalaes-register.herokuapp.com/
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
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.
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
La P. Funcional es coolScala 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 ScalaScala Meetup @ Madrid
Ignacio Navarro Martín @inavarromartin #OpenExpo2017
● El ecosistema Scala es muy maduro y grande
Monix
MacWire
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
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○ ...
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
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
}
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
}
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
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
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
}
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
}
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)
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”)
¡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/