JavaScript de Cero a Experto / JS funcional
Reto: el motor de reportes puro
El examen del estilo funcional: construir el motor de reportes de "Mi Bolsillo" como una biblioteca de estaciones puras y configurables que se COMBINAN en líneas de ensamble. Cuatro informes distintos, cero bucles, cero mutaciones, y el dato original tan intacto que lo vas a demostrar con código.
Reto
El motor de reportes puro
Qué debes construir
Con estos datos de partida:
const gastos = [
{ nombre: "Almuerzo", valor: 18000, categoria: "comida" },
{ nombre: "Bus", valor: 5800, categoria: "transporte" },
{ nombre: "Café", valor: 4500, categoria: "comida" },
{ nombre: "Cine", valor: 25000, categoria: "ocio" },
{ nombre: "Mercado", valor: 92000, categoria: "comida" },
{ nombre: "Taxi", valor: 15000, categoria: "transporte" },
];Tu motor debe producir EXACTAMENTE esta salida:
Comida: $ 114.500
Caros (más de $ 20.000): $ 117.000
Transporte: $ 20.800
Todo el mes: $ 160.300
¿Original intacto? true
Requisitos:
pipe(...fns)implementado por ti, conreduce— las tres líneas de la lección 4, escritas de memoria.- Fábricas de criterios curry:
porCategoria(categoria)ymayoresA(limite)— devuelven funciones(gasto) => boolean. - Estaciones puras:
filtrar(criterio)(curry: configuración → lista),totalizar(lista → número, conreduce),enCOP(número → string es-CO sin decimales) yetiquetar(titulo)(curry: produce"titulo: texto"). - Cuatro reportes POR COMBINACIÓN de esas piezas con
pipe— nota que el de "Todo el mes" no lleva estación de filtro (las líneas pueden tener largos distintos). - La prueba de inmutabilidad: fotografía el original ANTES
(
JSON.stringify) y compara DESPUÉS de correr los cuatro reportes — imprime¿Original intacto? true.
Reglas
- Cero
for/while, ceropush/splice/sort: solo métodos que producen (filter, map, reduce, toSorted). - Toda función del motor es PURA: nada de variables externas mutables,
el
console.logsolo en el script final. - Cada reporte es UNA expresión
pipe(...)— si escribes lógica suelta entre estaciones, va contra el espíritu. - La plata la formatea
toLocaleString/Intl, nunca a mano.
30:00
Cuando estés listo, arranca el reloj.
Qué sigue
Doce módulos: ya hablas los dos idiomas — objetos que encapsulan (módulo 11) y funciones que componen (módulo 12). El módulo 13 los pone a trabajar juntos en la arquitectura real: módulos ESM, singleton, factory y la joya de la corona — el patrón OBSERVER construido desde cero, la base para entender RxJS, los signals de Angular y medio ecosistema moderno.