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
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
Estos son métodos puros:
Estos son métodos impuros:
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é.