CodeForge

JavaScript de Cero a Experto / JS funcional

Funciones de orden superior: fábricas de funciones

Teoría20 min20 XP

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.