Diferenciando funciones puras e impuras en JavaScript

Autor: | Última modificación: 18 de marzo de 2024 | Tiempo de Lectura: 3 minutos
Temas en este post: ,

Algunos de nuestros reconocimientos:

Premios KeepCoding

¿Conoces las funciones puras e impuras? En la programación funcional, estos dos tipos de funciones juegan un papel importante y para ser un buen desarrollador es esencial que entiendas cuál es la diferencia entre ambos.

Para empezar, vamos a poner un ejemplo muy simple para entender las funciones puras e impuras. Imagina que estás cocinando. Tienes una receta que siempre sigues al pie de la letra y da como resultado un pastel delicioso. Eso es una función pura. Siempre que le das los mismos ingredientes (o entradas), te da el mismo pastel (o salida) y no afecta nada más en la cocina. Simple y predecible.

Ahora, imagina que un día decides improvisar un poco. Quizás pruebas una nueva especia o ajustas la temperatura del horno. El resultado del pastel ahora depende de estos cambios, que están fuera de la receta origina. Esto se parece a una función impura. Su resultado puede variar y puede afectar o ser afectado por el mundo exterior.

Tras este breve ejemplo, veamos mejor cómo y cuándo usar las funciones puras e impuras en JavaScript.

¿Qué son las funciones puras?

Las funciones puras en JavaScript son aquellas que, dada la misma entrada, siempre producirán la misma salida y no tienen efectos secundarios. Es decir, no interactúan con el código externo ni modifican el estado de la aplicación. Todo esto significa que las funciones puras, con su predictibilidad, son increíblemente útiles para mantener nuestro código ordenado, fácil de leer y de testar.

function suma(a, b) {
  return a + b;
}

console.log(suma(2, 3));  // 5

En este ejemplo, la función suma es pura, porque siempre que pases 2 y 3 como parámetros devolverá 5 y no cambia nada en el exterior de la función.

Beneficios de las funciones puras

Las funciones puras son predecibles y fáciles de testar. Dado que no dependen ni alteran el estado externo, puedes probarlas de manera aislada sin tener que preocuparte por el estado global de tu aplicación.

¿Qué son las funciones impuras?

Por el contrario, una función impura en JavaScript es aquella que tiene efectos secundarios, lo que significa que puede cambiar el estado de la aplicación o depende del estado global de dicha aplicación para producir un resultado. También puede interactuar con el código externo, como realizar una solicitud HTTP, manipular el DOM, o utilizar Math.random. Esto quiere decir que las funciones impuras son esenciales para interactuar con ese mundo exterior impredecible, ya sea obteniendo datos de una API o respondiendo a eventos del usuario.

let numero = 5;

function agregar(a) {
  numero += a;
}

agregar(10);
console.log(numero);  // 15

En este caso, la función agregar es impura porque modifica el estado global de la aplicación (la variable numero).

¿Por qué usar funciones impuras?

Aunque las funciones impuras pueden ser más difíciles de manejar y probar, son necesarias. En cualquier aplicación real necesitamos interactuar con el mundo exterior, ya sea para obtener datos de una API, manipular el DOM o trabajar con eventos del usuario.

Ejemplo de funciones puras e impuras

Veamos un ejemplo que resalta claramente la diferencia entre funciones puras e impuras.

// Función pura
function cuadrado(n) {
  return n * n;
}

// Función impura
function cuadradoImpuro(n) {
  console.log('Calculando el cuadrado de ', n);
  return n * n;
}

Las funciones puras e impuras calculan el cuadrado de un número. Sin embargo, cuadradoImpuro es impura, porque tiene un efecto secundario: imprime en la consola.

Para resumir qué son las funciones puras e impuras: las primeras son aquellas que, dada la misma entrada, siempre devolverán la misma salida y no tienen efectos secundarios. Por otro lado, las funciones impuras pueden tener efectos secundarios y su salida puede depender del estado global de la aplicación.

El uso de funciones puras puede hacer que tu código sea más fácil de entender y de probar. Sin embargo, en cualquier aplicación real, también necesitarás funciones impuras para interactuar con el mundo exterior.

Da un paso más

En KeepCoding, nuestra meta es transformarte en un maestro del desarrollo web. En nuestro Desarrollo Web Full Stack Bootcamp, aprenderás mucho más acerca de las funciones puras e impuras, junto a muchos otros conceptos esenciales de JavaScript.

Al final del bootcamp, no solo dominarás el arte de la programación en JavaScript, sino que estarás preparado para unirte al excitante y lucrativo mundo del sector IT. ¡Solicita ya mismo más información y atrévete a impulsar tu futuro!

Artículos ms leídos

¡CONVOCATORIA ABIERTA!

Desarrollo Web

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado