Programación funcional: Cuando JS aprobó las mates

  • ¿Qué es la programación funcional?
  • ¿Porqué programar de manera funcional?

  • ¿Qué es una función en JS?

  • Los clásicos de la PF en JS: map, filter, reduce

  • PF into de deep: recursividad, aplicación parcial, currificación y composición

  • PF más allá

  • Conclusiones

Outline

Yo, me, myself, no ego at all

 

  • Background:
    • Licenciada el ciencias químicas
    • Doctora en física de sistemas complejos
  • Actualmente:
    • Desarrolladora front en Sngular
    • Arquitectura front en BBVA

@HenarMendiola

Sí hace

Tratar las funciones como ciudadanos de primera clase

No hace

Cambios de estado

 

Mutación de datos

Programación funcional

Características

  • Declarativa
  • Funciones puras
  • Transparencia referencial
  • Inmutabilidad

Programación funcional

Imperativa

¿Cómo?

Declarativa

¿Qué?

Imperativa

¿Cómo?

Declarativa

¿Qué?

Funciones puras

  • Sin efectos secundarios.

 

  • Solo depende de sus argumentos

 

Transparencia referencial

Inmutabilidad

f(x,y)=x+y
f(2,3)=5
f(2,3)=5
f(2,3)=5

¿Porqué programar de manera funcional?

  • Descomposición de tareas complejas
  • Legibilidad
  • Código más fácilmente reusable
  • Testeabilidad

Las funciones en JS

  • Unidades básicas de trabajo.
  • Ciudadanos de primera clase.
  • Entidades de orden superior

 

El objeto function

  • caller
  • arguments
  • displayName
  • length
  • prototype
  • name
  • apply( )
  • bind( )
  • call( )
  • toSource( )
  • toString( )

Propiedades

Métodos

Los clásicos: map

f(v)=2v
x
y
z
2x
2y
2z

Los clásicos: filter

f(v)
x
y
z
y

Los clásicos: reduce

f(x,y,z)
w
x
y
z

PF into the deep: Recursividad

f(x)

Exit

 

¿condición?

No

PF into the deep: Recursividad

Ejemplo 1: Calcular el factorial de un número

n!=1*2*3*4....(n-1)*n
0!=1
1!=1
2!=2
3!=6
4!=24
5!=120
6!=720
7!=5040

PF into the deep: Recursividad

Ejemplo 2: Calcular la sucesión de fibonacci

f(n)=f(n-1)+f(n-2)
f(0)=0
f(1)=1
f(2)=1
f(4)=3
f(5)=5
f(6)=8
f(7)=13
f(8)=21
f(9)=34

PF into the deep: Aplicación parcial

f(x,y,z)
x=cte
g(y,z)

PF into the deep:

Currificación

f(x,y )\rightarrow z
curry(f(x,y)) \rightarrow g: g(y)=z

PF into the deep:

Currificación

f(x,y,z)
g(x)(y)(z)

PF into the deep: Composición

(f · g)(x)=f(g(x))
x
y
z
g(x)
f(y)

Más allá de este "scope"

  • Mónadas
  • Memoización
  • Combinadores
  • Funtores
  • Reactiva

Conclusiones

¡¡Programad de forma funcional!!

¡¡Programad en JS!!

Further reading

Agradecimientos

deck

By Henar Hernandez

deck

  • 192