JavaScript: imperativo, funcional y una sola pasada
Resuelve el mismo total con tres estilos. Verifica resultados, entrada vacía e inmutabilidad antes de discutir preferencias de programación.
Luis Tavarez ·
El problema antes del paradigma
Queremos sumar los centavos de órdenes pagadas sin modificar las órdenes recibidas. Un bucle con acumulador, una composición filter/map/reduce y un reduce de una sola pasada satisfacen el mismo contrato en este conjunto de datos.
Tres recorridos explícitos
El bucle describe cómo avanza el cálculo. La composición describe transformaciones separadas y crea arrays intermedios. El reduce de una pasada combina selección y acumulación. Ninguno necesita un estado global ni efectos externos.
Una variable local mutable no hace impura a una función: el criterio relevante es lo que el llamador puede observar. Object.freeze se aplica aquí tanto al array como a sus objetos; congelar solo el array no congelaría sus elementos. Tampoco equivale a congelar recursivamente un árbol arbitrario.
Verificar antes de comparar
Las tres funciones deben producir 2000 para el conjunto de prueba y cero para una entrada vacía. La aserción final confirma que los importes de entrada siguen iguales. El ejemplo no ejecuta un benchmark y no afirma que un estilo sea más rápido.
Elegir según el equipo y los datos
Usa la forma que permita revisar mejor el contrato y los efectos. Si el volumen hace relevantes las asignaciones intermedias, mide con datos representativos. Number no representa todos los enteros: importes o sumas fuera del rango seguro necesitan validación o una representación adecuada. Esta guía usa enteros pequeños, no un motor financiero.