Funciones Puras vs Impuras

JavaScript

Estos son los dos términos que siempre se escuchan en un lenguaje de programación llamados funciones puras e impuras.

Usted sabe que la función pura es siempre dependiente de los argumentos y no debe haber ningún efecto secundario.

OBTENER CURSO JAVASCRIPT DESDE CERO

Qué hack es efectos secundarios? ☠️

Cuando intentas usar código externo en la función o si estás mutando una variable, entonces se crea un Efecto Secundario.

Ejemplo:

let num = 10
function mul(val) {
    return num += val  
}

Como se puede ver en el fragmento anterior, la función tiene una dependencia de una variable externa llamada num. Además, muta el valor de num, lo que hace que su función sea impura.

 

Vamos a comprobar un ejemplo más rápido:

function hello() {
  console.log("Hello Folks!");
}

Entonces, ¿qué opinas del fragmento anterior? 🤔

 

Sí! Esto también es una función impura 😵💫

Como todos sabéis que JavaScript es síncrono, usa la consola o cualquier callback o promise/fetch hará que la función sea asíncrona.

Aquí el uso de la consola, que es una API web hace que sea una función impura.

Veamos otros efectos secundarios con ejemplos:

1). Manipulación del DOM, cualquier devolución de llamada o lectura/escritura de archivos

function mul(a,b) {
    document.write("Started Multiplication")
    return a * b
}
console.log(mul(2,5))

 

2). Actualización o modificación de una variable global en una función pura

let x = 10

function mul(a,b) {
    document.write("Started Multiplication")
    return a * b * x
}
console.log(mul(2,5))

 

3). Aquí también se muta la variable externa que depende de una variable externa.

let x

function mul(a,b) {
    x = 10
    return a * b * x
}
console.log(mul(2,5))

Entendamos la función Pura e Impura, ya que ahora tienes una idea de los efectos secundarios

 

Función Pura

  • Siempre devuelve el mismo resultado si se pasan los mismos argumentos
  • Nunca depende de ningún estado/dato/cambio durante la ejecución de un programa
  • Siempre devuelve algo
  • Aquí, escribir casos de prueba será sencillo

Función Impura

  • Cambiar el estado interno de cualquier argumento que se haya pasado
  • Puede tener efecto sin devolver nada
  • Escribir casos de prueba será un poco complicado ya que puede haber efectos secundarios

 

Métodos puros e impuros

Estos son métodos puros:

  • Array.map()
  • Array.reduce()
  • Array.filter()
  • Array.concat()
  • ... (sintaxis extendida, que se utiliza sobre todo para crear copias)

Estos son métodos impuros:

  • Array.splice()
  • Array.sort()
  • Date.now()
  • Math.random()

 

Puedes clonar un estado externo en una función pura.

Clonar un estado externo en una función pura no hace que la función sea impura.

Ejemplo:

let name = ["suprabha", "supi"]

function fullName(newName, name) {
  let clonedName = [...name]
  clonedName[clonedName.length] = newName
  return clonedName
}

console.log(fullName("sumi", name))

En el fragmento anterior, está utilizando el operador de propagación ... en la función fullName. Creará un clon del mismo y luego lo actualizará. Por lo tanto, no depende de la variable nombré.

OBTENER CURSO JAVASCRIPT DESDE CERO