java 8: más funcional que nunca

Post on 13-Jan-2017

1.817 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

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

Ejemplo

http://github.com/tuxtor/fpjavademo

Programacion funcional - Bueno

I Divertido

I Declarativo

I Menos codigo, codigo mas legible

Programacion funcional - Malo

I Performance - invokedinamic

I Debug

I Flexibilidad

Java 8 y mas

I 14 de noviembre

I http://www.guate-jug.net

I http://www.guate-jug.net/javaday2015/llamada

Gracias

I me@vorozco.com

I http://vorozco.com

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

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

top related