Java Programacion Funcional
Java Programacion Funcional
Java Programacion Funcional
Funcional en
Java SE
Introducción a
la programación
funcional
¿Qué es la
programación
funcional?
Funciones Datos
{}
Legibilidad
Testing
Concurrencia
Comportamientos
más definidos
Menos manejo
de estados
No hay que instalar
nada adicional
Funciones
¿Qué es
una función?
X Y Un tipo de dato u objeto
x1 y1 que toma un valor X y
genera un valor Y.
x2 y2
x3 y3 Idealmente, por cada X
… … siempre genera una Y.
Es una serie de pasos
parametrizados.
Puede o no devolver un
resultado.
Se puede definir, almacenar o
declarar bajo demanda (como
cualquier otro tipo).
ƒ(x) = x2 + 5
double parabola(double x) {
return Math.pow(x, 2) +
5;
}
Podemos definir funciones con
respecto a otras funciones.
esPar(x) =
!esNon(x)
Podemos definir funciones con
respecto a si mismas (recursividad).
factorial(x) = if x <= 2 :
x
else : x *
factorial(x-1)
Podemos definir funciones que tomen
otras funciones como parámetros.
Function x; int
foo(Function
…
Function
✔ Generan el mismo
𝒙
resultado para el
mismo parámetro
✔
○ sum(5, 3)
//Siempre
será 8
𝒚
Funciones puras
✔ Funcionan en
𝒙
aislamiento
(no dependen ni las
afecta un contexto)
✔ Son determinísticas
𝒚
Funciones puras
Puede Puede
Funcion invocar: invocar:
Pura Impura
Pura ✓ ✗
Impura ✓ ✓
Efectos
secundarios
myFunction()
Function bar(int x)
O ambas…
Function baz(Function f)
Ventajas
Pasar comportamiento
Compartir un medio de
comunicación (callbacks)
Compartir lógica/reglas
Funciones
lambda
Parten de un concepto
matemático de los años 30
(Alonzo Church)
Son funciones anónimas
¯\_(ツ)_/¯
Funcion:
● Tiene un nombre
○ Function baz = …
○ int foo(…)
Lambda:
● No tiene nombre
○ x -> …
¿Por qué usarlas?
Es un comportamiento de uso
único