Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Java 8: Más funcional que nunca

2,767 views

Published on

Introducción a programación funcional con Java 8.

Presentación parte de GuateJUG tour 2015, Universidad de San Carlos de Guatemala 26/09/2015

Published in: Software
  • Be the first to comment

  • Be the first to like this

Java 8: Más funcional que nunca

  1. 1. Java 8: M´as funcional que nunca V´ıctor Orozco GuateJUG September 26, 2015
  2. 2. V´ıctor Orozco Developer (JVM/Open Source Advocate) Ex-JUG Leader Consultor independiente (Nabenik) @tuxtor The J*
  3. 3. Java 8 https://www.oracle.com/java8 https://www.oracle.com/java8launch
  4. 4. Java 8 Nashorn Date/Time API Compact Profiles Type Annotations Default methods Streams Lambda Expressions
  5. 5. Paradigmas (Simplificaci´on) Paradigmas Imperativo Estructurado Pascal OOP Java Declarativo Funcional Clojure Logico Prolog
  6. 6. Programaci´on funcional Computaci´on = Evaluaci´on de funciones matem´aticas (calculo de lambdas) NO cambios en estado NO mutar datos Declarativo → Expresiones
  7. 7. Java vs. Funcional (Organizaci´on) Java Clases FP Funciones
  8. 8. Java vs. Funcional (Algoritmos) Java Imperativo, comportamiento como una serie de pasos FP Declarativo, interacci´on de fun- ciones sin especificar su contenido
  9. 9. Java vs. Funcional (Mutabilidad y estado) Java Estado y comportamiento juntos, promueve mutabilidad FP Evita estado, pro- mueve inmutabilidad
  10. 10. Java vs. Funcional (Estilo) Java OOP + Patrones para ab- stracciones de alto nivel FP Es una abstracci´on en alto nivel por si mismo
  11. 11. Java vs. Funcional (Concurrencia) Java Concurrencia basica con locks y recursos compartidos FP Workflows paralelos sin es- tado compartido (no locks!)
  12. 12. Java vs. Funcional (C´odigo) Java Descriptivo (demasiado) FP Conciso y denso
  13. 13. Java 8 Un licuado de programaci´on orientada a objetos con azucares sint´acticas funcionales.
  14. 14. ¿Porque programaci´on funcional? ¡Paralelismo! Multicore, multicpu Elegancia
  15. 15. Programaci´on funcional en Java 8 Java no es un lenguaje funcional puro (Clojure) Otras opciones JVM (Scala, Kotlin, Ceylon) Java soporta programaci´on funcional a trav´es de bibliotecas
  16. 16. Bloques funcionales en Java 8 Interfaces funcionales Referencia a funciones Lambdas Funciones predefinidas en Java 8 (java.util.function) Streams API
  17. 17. Interfaces funcionales Solo un m´etodo abstracto Interfaces ahora permiten default methods @FunctionalInterface public interface Runnable { public abstract void Run (); }
  18. 18. Referencias a funciones Permiten utilizar una funci´on dentro de una expresi´on lambda Permiten invocar m´etodos existentes
  19. 19. Expresion lambda Funci´on an´onima sin asociar a un identificador Usadas para pasar comportamiento a funciones high-order Usadas para construir el resultado de una funci´on high-order que necesita retornar una funci´on
  20. 20. Expresion lambda (anatomia) (parametros) → comportamiento (Integer i) -> {System.out.println(i);}; i -> System.out.println(i); i -> i*2;
  21. 21. Funciones predefinidas M´as de 40 interfaces funcionales en Java 8 Raramente se deben crear nuevas
  22. 22. Streams API Map-Reduce Monads = Serie de pasos / funciones anidadas Stream Operaci´on intermedia Operaci´on intermedia Operaci´on terminal
  23. 23. Ejemplo http://github.com/tuxtor/fpjavademo
  24. 24. Programaci´on funcional - Bueno Divertido Declarativo Menos c´odigo, c´odigo m´as legible
  25. 25. Programaci´on funcional - Malo Performance - invokedinamic Debug Flexibilidad
  26. 26. Lecturas recomendadas JDK 8 Lamdas & Streams MOOC Functional Programming in Java: Harnessing the Power Of Java 8 Lambda Expressions
  27. 27. Java 8 y m´as 14 de noviembre http://www.guate-jug.net http://www.guate-jug.net/javaday2015/llamada
  28. 28. Gracias me@vorozco.com http://vorozco.com http://github.com/tuxtor/slides This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Guatemala License.

×