La programación funcional (FP) es un paradigma declarativo, esto quiere decir que le decimos al programa que es lo que debe de hacer y no como los pasos a seguir para lograrlo, donde se evitan los efectos secundarios y los datos se consideran inmutables para que el código sea más fácil de mantener y razonar.

Esta es solo una introducción para comenzar con algunos conceptos que se usan comúnmente en React y que debe conocer.

FUNCIONES DE PRIMERA CLASE

Javascript tiene funciones de primera clase porque se tratan como a cualquier otra variable, lo que puede parar una función como parámetro a otras funciones, o puede ser devuelta por otra función y asignarse como valor a una variable.

Las High order Functions (HoF ) son funciones que toman una función como parámetro y, opcionalmente, algunos otros parámetros, y devuelven una función. La función devuelta generalmente se mejora con algunos comportamientos especiales.

Veamos un ejemplo:

const add = (x, y) => x + y

const log = fn => (...args) => {
	return fn(...args)
}

const logAdd = log(add)

logAdd(4, 5) // 9

PUREZA

Un aspecto importante de FP es escribir funciones puras. Encontrará este concepto muy a menudo en el ecosistema React, especialmente si busca en bibliotecas como Redux.

¿Qué significa que una función sea pura?

Una función es pura cuando no hay efectos secundarios, lo que significa que la función no cambia nada que no sea local a la función en sí.

Por ejemplo, una función que cambia el estado de una aplicación, o modifica variables definidas en el alcance superior, o una función que toca entidades externas, como el Modelo de Objetos de Documento (DOM), se considera impura. Las funciones impuras son más difíciles de depurar y la mayoría de las veces no es posible aplicarlas varias veces y esperar obtener el mismo resultado.

Por ejemplo, la siguiente función es pura:

const add = (x, y) => x + y

// si lo ejecutas varias veces obtendras el mismo rasultado

La siguiente función no es pura:

let x = 0
const add = y => (x = x + y)

// ejecuta add(1) dos veces, y obtendras dos diferentes
// resultados.

add(1) // 1
add(1) // 2

INMUTABILIDAD

Hemos visto cómo escribir funciones puras que no mutan el estado, pero ¿y si necesitamos cambiar el valor de una variable? En FP, una función, en lugar de cambiar el valor de una variable, crea una nueva variable con un nuevo valor y lo devuelve. Esta forma de trabajar con datos se llama inmutabilidad.

Un valor inmutable es un valor que no se puede cambiar.

Veamos un ejemplo: