JavaScript de Cero a Experto / JS funcional
Funciones de orden superior: fábricas de funciones
Una función de orden superior (higher-order function) es la que trata a
otras funciones como material de trabajo: las recibe, o las FABRICA. La
primera mitad ya la vives a diario — map, filter, addEventListener.
La segunda mitad es el salto de nivel de hoy: escribir funciones que
producen funciones a la medida.
La troqueladora de sellos
Compara con la alternativa sin fábrica: un filtro escrito a mano por cada
categoría ((g) => g.categoria === "comida", otro para transporte, otro
para ocio…) — funciona, pero la LÓGICA de "filtrar por categoría" queda
regada en copias. La fábrica la declara UNA vez; las copias se fabrican
solas. Es tu clase del módulo 11 en versión funcional: molde de
comportamiento, sin objeto.
El decorador: envolver para mejorar
La jugada más elegante de las fábricas: recibir una función Y devolver una versión mejorada de ella — misma firma, superpoder agregado:
Fíjate en la transparencia: totalizarMedido acepta lo mismo y devuelve
lo mismo que totalizar — quien la usa ni se entera del envoltorio. Con
este patrón se construyen cosas que ya te suenan y otras que vienen:
memoizar(fn) (cachear resultados de funciones puras — el pago de la
lección 1), unaVez(fn) (tu { once: true } del módulo 8, hecho a mano),
y debounce(fn, ms) — el decorador estrella de las entrevistas, que
construirás en el módulo 17.
Nota honesta de vocabulario: "de orden superior", "fábrica", "decorador" — los nombres impresionan más que el mecanismo, que siempre es el mismo: funciones como valores (módulo 3) + la mochila (closures). Si esos dos cimientos están firmes, todo este módulo es cuesta abajo.
Fabricas const esCaro = mayoresA(20000) y DESPUÉS reasignas la variable limite... espera — mayoresA ya retornó hace rato. ¿Cómo hace esCaro para recordar el 20000 si la ejecución de mayoresA ya terminó?
Mini-reto
Tu kit de sellos para "Mi Bolsillo": 1) fabrica entreValores(min, max)
(dos datos en la mochila) y úsala con filter; 2) fabrica el decorador
conLog(fn) que imprima → llamando fn.name con: args antes de delegar,
y envuelve totalizar; 3) la joya: memoizar(fn) — un decorador con un
Map en la mochila que, si ya vio ese argumento, devuelve el resultado
cacheado sin llamar a la original (pruébalo con una función que además
haga console.log para VER cuándo se ejecuta de verdad y cuándo responde
el caché).
Qué sigue
Ya fabricas piezas configuradas. El siguiente movimiento es CONECTARLAS:
que la salida de una función sea la entrada de la siguiente, en cadena —
composición — y la función pipe que arma esas cadenas como una línea de
ensamble. La lección donde el estilo funcional empieza a verse elegante de
verdad.