Java 8: Más funcional que nunca
-
Upload
victor-leonel-orozco-lopez -
Category
Software
-
view
1.817 -
download
0
Transcript of Java 8: Más funcional que nunca
![Page 1: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/1.jpg)
Java 8: Mas funcional que nunca
Vıctor Orozco
GuateJUG
September 26, 2015
![Page 2: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/2.jpg)
Vıctor Orozco
I Developer (JVM/OpenSource Advocate)
I Ex-JUG Leader
I Consultor independiente(Nabenik)
I @tuxtor
I The J*
![Page 3: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/3.jpg)
Java 8
https://www.oracle.com/java8https://www.oracle.com/java8launch
![Page 4: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/4.jpg)
Java 8
I Nashorn
I Date/Time API
I Compact Profiles
I Type Annotations
I Default methods
I Streams
I Lambda Expressions
![Page 5: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/5.jpg)
Paradigmas (Simplificacion)
Paradigmas
Imperativo
Estructurado
Pascal
OOP
Java
Declarativo
Funcional
Clojure
Logico
Prolog
![Page 6: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/6.jpg)
Programacion funcional
I Computacion = Evaluacion de funciones matematicas (calculode lambdas)
I NO cambios en estado
I NO mutar datos
I Declarativo → Expresiones
![Page 7: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/7.jpg)
Java vs. Funcional (Organizacion)
Java Clases
FP Funciones
![Page 8: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/8.jpg)
Java vs. Funcional (Algoritmos)
JavaImperativo, comportamiento
como una serie de pasos
FPDeclarativo, interaccion de fun-
ciones sin especificar su contenido
![Page 9: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/9.jpg)
Java vs. Funcional (Mutabilidad y estado)
JavaEstado y comportamiento
juntos, promueve mutabilidad
FPEvita estado, pro-
mueve inmutabilidad
![Page 10: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/10.jpg)
Java vs. Funcional (Estilo)
JavaOOP + Patrones para ab-
stracciones de alto nivel
FPEs una abstraccion enalto nivel por si mismo
![Page 11: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/11.jpg)
Java vs. Funcional (Concurrencia)
JavaConcurrencia basica con
locks y recursos compartidos
FPWorkflows paralelos sin es-
tado compartido (no locks!)
![Page 12: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/12.jpg)
Java vs. Funcional (Codigo)
Java Descriptivo (demasiado)
FP Conciso y denso
![Page 13: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/13.jpg)
Java 8
Un licuado de programacion orientada a objetos con azucaressintacticas funcionales.
![Page 14: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/14.jpg)
¿Porque programacion funcional?
I ¡Paralelismo!
I Multicore, multicpu
I Elegancia
![Page 15: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/15.jpg)
Programacion funcional en Java 8
I Java no es un lenguaje funcional puro (Clojure)
I Otras opciones JVM (Scala, Kotlin, Ceylon)
I Java soporta programacion funcional a traves de bibliotecas
![Page 16: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/16.jpg)
Bloques funcionales en Java 8
I Interfaces funcionales
I Referencia a funciones
I Lambdas
I Funciones predefinidas en Java 8 (java.util.function)
I Streams API
![Page 17: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/17.jpg)
Interfaces funcionales
I Solo un metodo abstracto
I Interfaces ahora permiten default methods
@FunctionalInterface
public interface Runnable
{
public abstract void Run ();
}
![Page 18: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/18.jpg)
Referencias a funciones
I Permiten utilizar una funcion dentro de una expresion lambda
I Permiten invocar metodos existentes
![Page 19: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/19.jpg)
Expresion lambda
I Funcion anonima sin asociar a un identificador
I Usadas para pasar comportamiento a funciones high-order
I Usadas para construir el resultado de una funcion high-orderque necesita retornar una funcion
![Page 20: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/20.jpg)
Expresion lambda (anatomia)
(parametros) → comportamiento
(Integer i) -> {System.out.println(i);};
i -> System.out.println(i);
i -> i*2;
![Page 21: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/21.jpg)
Funciones predefinidas
I Mas de 40 interfaces funcionales en Java 8
I Raramente se deben crear nuevas
![Page 22: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/22.jpg)
Streams API
I Map-Reduce
I Monads = Serie de pasos / funciones anidadas
StreamOperacionintermedia
Operacionintermedia
Operacionterminal
![Page 24: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/24.jpg)
Programacion funcional - Bueno
I Divertido
I Declarativo
I Menos codigo, codigo mas legible
![Page 25: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/25.jpg)
Programacion funcional - Malo
I Performance - invokedinamic
I Debug
I Flexibilidad
![Page 26: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/26.jpg)
Lecturas recomendadas
I JDK 8 Lamdas & Streams MOOC
I Functional Programming in Java: Harnessing the Power OfJava 8 Lambda Expressions
![Page 27: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/27.jpg)
Java 8 y mas
I 14 de noviembre
I http://www.guate-jug.net
I http://www.guate-jug.net/javaday2015/llamada
![Page 28: Java 8: Más funcional que nunca](https://reader033.fdocumento.com/reader033/viewer/2022042619/58785b651a28ab18098b51eb/html5/thumbnails/28.jpg)
Gracias
I http://vorozco.com
I http://github.com/tuxtor/slides
This work is licensed under a Creative CommonsAttribution-ShareAlike 3.0 Guatemala License.