Las funciones puras son los componentes básicos de la programación funcional. Son adorados por su simplicidad y capacidad de prueba.
En este artículo, encontrará una
lista de verificación que ayudará a determinar si una función es pura o no.

Lista de verificación
Una función debe cumplir dos condiciones para ser considerada "pura":- Cada vez que la función devuelve el mismo resultado cuando se llama con el mismo conjunto de argumentos
- sin efectos secundarios
Consideremos con más detalle.
1. La misma entrada => La misma salida
Compara esto:
const add = (x, y) => x + y; add(2, 4); // 6
Con esto:
let x = 2; const add = (y) => { x += y; }; add(4); // x === 6 (the first time)
En el primer caso, el valor se devuelve en función de los parámetros especificados, independientemente de dónde / cuándo lo llame.
Si agrega 2 y 4, siempre obtiene 6.
Nada afecta el resultado.
Funciones impuras = resultados inconsistentesEl segundo ejemplo no devuelve nada. Se basa en la condición general para llevar a cabo su trabajo aumentando la variable fuera de su campo.
Este modelo es una pesadilla para los desarrolladores.
El estado compartido introduce una dependencia de tiempo. Obtiene resultados diferentes dependiendo de cuándo llamó a la función. La primera vez que el resultado es 6, la próxima vez 10 y así sucesivamente.
Cual es mejor¿En qué caso obtendrá menos errores que aparecen solo bajo ciertas condiciones?
¿En qué caso es más probable que tenga éxito en un entorno de subprocesos múltiples donde las dependencias de tiempo pueden dañar el sistema?
Definitivamente en el primero.
2. Sin efectos secundarios

Esta prueba es una lista de verificación en sí misma.
Ejemplos de efectos secundarios:- Modificación de los parámetros de entrada.
- console.log
- Llamadas HTTP (AJAX / fetch)
- Cambio de sistema de archivos
- Solicitudes DOM
De hecho, cualquier trabajo realizado por una función no está relacionado con el cálculo del resultado final.
Te aconsejo que veas el
video de Bob Martin.
Aquí hay una función "sucia" con un efecto secundario.
const impureDouble = (x) => { console.log('doubling', x); return x * 2; }; const result = impureDouble(4); console.log({ result });
console.log aquí es un efecto secundario, pero no le hará daño. Seguiremos obteniendo los mismos resultados, dados los mismos datos.
Sin embargo, esto puede causar problemas.
Cambio de objeto "impuro"
const impureAssoc = (key, value, object) => { object[key] = value; }; const person = { name: 'Bobo' }; const result = impureAssoc('shoeSize', 400, person); console.log({ person, result });
La variable persona se cambió para siempre porque la función se declaró a través de una instrucción de asignación.
El estado compartido significa que el impacto de
impureAssoc ya no es completamente aparente. Comprender el efecto en el sistema ahora incluye rastrear cada variable que haya tocado y conocer su historial.
Estado compartido = dependencias de tiempo.Podemos borrar
impureAssoc simplemente devolviendo un nuevo objeto con las propiedades deseadas.
"Lo limpiamos" const pureAssoc = (key, value, object) => ({ ...object, [key]: value }); const person = { name: 'Bobo' }; const result = pureAssoc('shoeSize', 400, person); console.log({ person, result });
PureAssoc ahora devuelve el resultado de la prueba, por lo que no tiene que preocuparse si cambia en otro lugar.
Se podría hacer así:
const pureAssoc = (key, value, object) => { const newObject = { ...object }; newObject[key] = value; return newObject; }; const person = { name: 'Bobo' }; const result = pureAssoc('shoeSize', 400, person); console.log({ person, result });
Cambiar la entrada puede ser peligroso, pero cambiar la copia no es un problema. El resultado final es una función comprobable y predecible que funciona sin importar dónde y cuándo lo llame.
Los cambios se limitan a esta pequeña área, y aún está devolviendo el valor.
Resumen- Una función es pura si no tiene efectos secundarios y cada vez devuelve el mismo resultado cuando se llama con el mismo conjunto de argumentos.
- Los efectos secundarios incluyen: cambio de entrada, llamadas HTTP, escritura en disco, salida a pantalla.
- Puede clonar de forma segura y luego cambiar los parámetros de entrada. Simplemente deje el original sin cambios.
- La sintaxis de distribución (... sintaxis) es la forma más fácil de clonar objetos y matrices.