Trabajar con funciones puras puede ser mucho menos estresante, ya que puede probarlas fácilmente y razonar sobre ellas con más confianza.

Las funciones puras son funciones que no producen efectos secundarios y, cuando se las llama con los mismos parámetros de entrada, siempre devolverán la misma salida.

Puede usar funciones puras para asegurarse de que su código sea limpio, mantenible y comprobable. Estas funciones son ideales para estas tareas porque son predecibles y no modifican estados externos.

También son más fáciles de depurar, lo que los hace útiles para desarrollar sistemas de software complejos. Aquí explorará funciones puras en JavaScript, sus características y sus ventajas.

Características de una función pura

Para Una función para ser “puro”, tiene que cumplir algunos requisitos.

Valor de retorno constante

Una función pura siempre debe devolver el mismo valor dada la misma entrada, independientemente de la cantidad de veces que se llame.

Por ejemplo, considere la siguiente función:

instagram viewer
funciónmultiplicar(un, b) {
devolver un * b;
}

El multiplicar La función del ejemplo anterior siempre devolverá el producto de sus dos argumentos. Dado el mismo conjunto de argumentos, tiene un valor de retorno constante.

Llamar a esta función varias veces con los mismos argumentos producirá el mismo resultado cada vez. Por ejemplo:

multiplicar(2, 3); // devuelve 6
multiplicar(2, 3); // devuelve 6
multiplicar(2, 3); // devuelve 6

Alternativamente, considere el siguiente ejemplo:

funciónmultiplicarNúmeroAleatorio(número) {
devolver número * Matemáticas.piso(Matemáticas.aleatorio() * 10);
}

multiplicarNúmeroAleatorio(5); // Resultados impredecibles
multiplicarNúmeroAleatorio(5); // Resultados impredecibles
multiplicarNúmeroAleatorio(5); // Resultados impredecibles

El multiplicarNúmeroAleatorio La función anterior devolverá resultados diferentes cada vez que la llame, haciéndola impura. Los resultados de esta función son impredecibles, por lo que es difícil probar los componentes que dependen de ella.

Sin efectos secundarios

Una función pura no debe producir ningún efecto secundario. Un efecto secundario hace referencia a cualquier modificación de estado o comportamiento fuera del alcance de la función, como la modificación de variables globales, la salida de la consola, las solicitudes de red o la manipulación del DOM.

Cuando una función pura tiene un efecto secundario, ya no es pura porque afecta el estado externo y viola el principio de no tener efectos secundarios observables. Por lo tanto, las funciones puras evitan los efectos secundarios para garantizar que no alteren el estado del programa.

Por ejemplo, considere el siguiente ejemplo:

dejar contar = 0;

funciónincremento() {
contar++;
consola.log (recuento);
}

incremento(); // Registros 1
incremento(); // Registros 2
incremento(); // Registros 3

El incremento función en este ejemplo tiene el efecto secundario de modificar el contar variable fuera de su alcance. También se registra en la consola.

Esta función no es pura porque tiene un efecto secundario, lo que puede dificultar la predicción de su salida y la prueba de forma aislada. Para hacerlo puro, puede modificarlo para que tome el contar variable como argumento y devolver el valor incrementado sin modificar ningún estado externo.

Al igual que:

funciónincremento(contar) {
devolver contar + 1;
}

incremento(1); // devuelve 2
incremento(1); // devuelve 2
incremento(1); // devuelve 2

La versión de la incremento La función del ejemplo anterior no tiene efectos secundarios, ya que no modifica ninguna variable externa ni registra ningún valor. Además, no importa cuántas veces lo llame, devuelve el mismo valor para la misma entrada. Por lo tanto, es una función pura.

Otras características

Además de tener un valor de retorno constante y no producir ningún efecto secundario, debe cumplir con las siguientes reglas cuando esté creando una función JavaScript que quieres ser puro:

  • Su función no debe modificar ninguno de sus argumentos. En cambio, si alguna operación requiere mutación, haga una copia del argumento y mute la copia.
  • Su función siempre debe tener un valor de retorno. Si su función no tiene un valor de retorno o efectos secundarios, ¡no puede hacer nada!
  • Su función no debe depender de ningún estado externo.

Ventajas de las funciones puras

Las funciones puras tienen ciertos beneficios sobre las funciones impuras, algunas de las cuales incluyen lo siguiente.

Testabilidad

Las funciones puras son fáciles de probar ya que su comportamiento de entrada/salida está bien definido. Además, las funciones puras no dependen del estado externo o de los efectos secundarios. Por lo tanto, puede probarlos de forma aislada sin preocuparse por las dependencias o interacciones con otras partes del programa.

Por el contrario, probar funciones impuras que dependen del estado externo o que producen efectos secundarios puede ser más desafiante porque su comportamiento puede depender del estado del programa o de otros factores externos. Esto puede dificultar la creación de casos de prueba integrales y garantizar que la función se comporte correctamente en todos los escenarios.

Memoización

Debido a que las funciones puras siempre producen la misma salida para la misma entrada y no producen efectos secundarios, puede memorizarlas fácilmente.

Al confiar en estas propiedades y usar la memorización, puede almacenar en caché el resultado de una llamada de función pura para una entrada específica. Su función puede devolver el resultado almacenado en caché la próxima vez que se llame con la misma entrada.

Memorización de funciones puras puede mejorar el rendimiento de un programa, especialmente para cálculos costosos que tratan repetidamente con la misma entrada, sin preocuparse por la interferencia con el estado del programa.

Por el contrario, las funciones impuras pueden producir diferentes resultados para la misma entrada, dependiendo del estado del programa o de factores externos. Esto hace que sean difíciles de memorizar porque el resultado almacenado en caché puede no ser válido si las dependencias de la función o el estado externo cambian entre llamadas.

concurrencia

Dado que las funciones puras no modifican ningún estado externo ni producen efectos secundarios, son seguras para subprocesos. Puede ejecutarlos simultáneamente sin preocuparse por las condiciones de carrera o los problemas de sincronización.

Por el contrario, las funciones impuras pueden ser difíciles de ejecutar simultáneamente porque pueden interferir entre sí o producir un comportamiento inesperado cuando se ejecutan en paralelo. Por ejemplo, si dos subprocesos acceden y modifican la misma variable global, pueden sobrescribir los cambios del otro o producir resultados inconsistentes.

Funciones puras vs. Funciones impuras

Puede escribir programas usando una combinación de funciones puras e impuras, ya que cada tipo tiene sus usos.

Las funciones puras son fáciles de optimizar, probar y paralelizar, lo que las hace adecuadas para casos de uso como la programación funcional, el almacenamiento en caché, las pruebas, la programación paralela y las tareas de procesamiento de datos.

Sin embargo, las funciones impuras plantean desafíos en las pruebas y la concurrencia, pero son útiles cuando se trabaja con estructuras de datos mutables o interactúan con sistemas y recursos externos.