28
Java 8: M´ as funcional que nunca ıctor Orozco GuateJUG September 26, 2015

Java 8: Más funcional que nunca

Embed Size (px)

Citation preview

Page 1: Java 8: Más funcional que nunca

Java 8: Mas funcional que nunca

Vıctor Orozco

GuateJUG

September 26, 2015

Page 2: Java 8: Más funcional que nunca

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

Java 8

https://www.oracle.com/java8https://www.oracle.com/java8launch

Page 4: Java 8: Más funcional que nunca

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

Paradigmas (Simplificacion)

Paradigmas

Imperativo

Estructurado

Pascal

OOP

Java

Declarativo

Funcional

Clojure

Logico

Prolog

Page 6: Java 8: Más funcional que nunca

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

Java vs. Funcional (Organizacion)

Java Clases

FP Funciones

Page 8: Java 8: Más funcional que nunca

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

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

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

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

Java vs. Funcional (Codigo)

Java Descriptivo (demasiado)

FP Conciso y denso

Page 13: Java 8: Más funcional que nunca

Java 8

Un licuado de programacion orientada a objetos con azucaressintacticas funcionales.

Page 14: Java 8: Más funcional que nunca

¿Porque programacion funcional?

I ¡Paralelismo!

I Multicore, multicpu

I Elegancia

Page 15: Java 8: Más funcional que nunca

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

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

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

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

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

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

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

Streams API

I Map-Reduce

I Monads = Serie de pasos / funciones anidadas

StreamOperacionintermedia

Operacionintermedia

Operacionterminal

Page 23: Java 8: Más funcional que nunca

Ejemplo

http://github.com/tuxtor/fpjavademo

Page 24: Java 8: Más funcional que nunca

Programacion funcional - Bueno

I Divertido

I Declarativo

I Menos codigo, codigo mas legible

Page 25: Java 8: Más funcional que nunca

Programacion funcional - Malo

I Performance - invokedinamic

I Debug

I Flexibilidad

Page 27: Java 8: Más funcional que nunca

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

Gracias

I [email protected]

I http://vorozco.com

I http://github.com/tuxtor/slides

This work is licensed under a Creative CommonsAttribution-ShareAlike 3.0 Guatemala License.