java 8: más funcional que nunca
TRANSCRIPT
Java 8: Mas funcional que nunca
Vıctor Orozco
GuateJUG
September 26, 2015
Vıctor Orozco
I Developer (JVM/OpenSource Advocate)
I Ex-JUG Leader
I Consultor independiente(Nabenik)
I @tuxtor
I The J*
Java 8
https://www.oracle.com/java8https://www.oracle.com/java8launch
Java 8
I Nashorn
I Date/Time API
I Compact Profiles
I Type Annotations
I Default methods
I Streams
I Lambda Expressions
Paradigmas (Simplificacion)
Paradigmas
Imperativo
Estructurado
Pascal
OOP
Java
Declarativo
Funcional
Clojure
Logico
Prolog
Programacion funcional
I Computacion = Evaluacion de funciones matematicas (calculode lambdas)
I NO cambios en estado
I NO mutar datos
I Declarativo → Expresiones
Java vs. Funcional (Organizacion)
Java Clases
FP Funciones
Java vs. Funcional (Algoritmos)
JavaImperativo, comportamiento
como una serie de pasos
FPDeclarativo, interaccion de fun-
ciones sin especificar su contenido
Java vs. Funcional (Mutabilidad y estado)
JavaEstado y comportamiento
juntos, promueve mutabilidad
FPEvita estado, pro-
mueve inmutabilidad
Java vs. Funcional (Estilo)
JavaOOP + Patrones para ab-
stracciones de alto nivel
FPEs una abstraccion enalto nivel por si mismo
Java vs. Funcional (Concurrencia)
JavaConcurrencia basica con
locks y recursos compartidos
FPWorkflows paralelos sin es-
tado compartido (no locks!)
Java vs. Funcional (Codigo)
Java Descriptivo (demasiado)
FP Conciso y denso
Java 8
Un licuado de programacion orientada a objetos con azucaressintacticas funcionales.
¿Porque programacion funcional?
I ¡Paralelismo!
I Multicore, multicpu
I Elegancia
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
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
Interfaces funcionales
I Solo un metodo abstracto
I Interfaces ahora permiten default methods
@FunctionalInterface
public interface Runnable
{
public abstract void Run ();
}
Referencias a funciones
I Permiten utilizar una funcion dentro de una expresion lambda
I Permiten invocar metodos existentes
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
Expresion lambda (anatomia)
(parametros) → comportamiento
(Integer i) -> {System.out.println(i);};
i -> System.out.println(i);
i -> i*2;
Funciones predefinidas
I Mas de 40 interfaces funcionales en Java 8
I Raramente se deben crear nuevas
Streams API
I Map-Reduce
I Monads = Serie de pasos / funciones anidadas
StreamOperacionintermedia
Operacionintermedia
Operacionterminal
Programacion funcional - Bueno
I Divertido
I Declarativo
I Menos codigo, codigo mas legible
Programacion funcional - Malo
I Performance - invokedinamic
I Debug
I Flexibilidad
Lecturas recomendadas
I JDK 8 Lamdas & Streams MOOC
I Functional Programming in Java: Harnessing the Power OfJava 8 Lambda Expressions
Java 8 y mas
I 14 de noviembre
I http://www.guate-jug.net
I http://www.guate-jug.net/javaday2015/llamada
Gracias
I http://vorozco.com
I http://github.com/tuxtor/slides
This work is licensed under a Creative CommonsAttribution-ShareAlike 3.0 Guatemala License.