Qindel Group estuvo representada en el evento Open Expo 2017 por Ignacio Navarro, Desarrollador Senior de la empresa.
Navarro es programador de Scala y colaborador habitual de proyectos y charlas de programación funcional. Fue parte del MeetUps Haskell, donde habló de Scala, un lenguaje multiparadigma (Funcional y Orientado a Objetos) que corre sobre la JVM (*).
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”)