A√ļn no tienes acceso a esta clase

Crea una cuenta y contin√ļa viendo este curso

Utilizando inmutabilidad en nuestras funciones

9/23
Recursos

Otra característica de las funciones puras es la inmutabilidad. Si necesitamos modificar el valor de los parámetros que reciben nuestras funciones, debemos copiar el valor de los argumentos y modificar estas nuevas variables, así evitamos modificar innecesariamente variables con las que nuestras funciones puras no tienen nada que ver.

Ejemplo:

// Con mutaciones
const addToList = (list, item, quantity) => {
	list.push({ // modificamos el argumento `list`
		item,
		quantity
	})
	return list
}

//  Sin mutaciones (inmutabilidad)
const addToList = (list, item, quantity) => {
	const newList = JSON.parse(JSON.stringify(list))
	newList.push({ // modificamos la copia del argumento
		item,
		quantity
	})

	return newList
}

Aportes 14

Preguntas 2

Ordenar por:

¬ŅQuieres ver m√°s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi√≥n.

La inmutabilidad en las propiedades o atributos de un objeto es fundamental para poder predecir su comportamiento o valor (estado) en el futuro. Al crear nuevos objetos cambiados (mutados), sin alterar el objeto original, nos aseguramos de estar siendo muy expl√≠citos al hacer modificaciones, reduciendo el riesgo de cambios indeseados o hechos por simple descuido o desconocimiento. Esta caracter√≠stica es especialmente √ļtil en todo lo relacionado a las pruebas de software o testings.

Otra forma de copiar arreglos en javascript usando ecmascript teniendo en consideracion que la version de actual de chrome ya soporta ecmascript2015:

const addToList = (list, item, quantity) => [
  ...list,
  { item, quantity }
]

Referencia:
https://vincent.billey.me/pure-javascript-immutable-array/

Hay aspectos que no tomamos en cuenta cuando comenzamos a programar y creo que este es uno de ellos, estar consciente de los efectos colaterales de alterar o mutar un objecto que quizá más adelante afecte a nuestra aplicación puede diferenciar a un programador experimentado de un debutante.

En programación funcional se trata de no mutar ninguna variable dentro de nuestra aplicación, con el fin de que nuestras funciones sean más transparentes y predecibles.

Creo que sería una mejor práctica utilizar el método slice() de los arreglos.

const addList = (LIst, item, key) => {
  const newArray = LIst.slice();

  newArray.push({
    item,
    key,
  });

  return newArray;
};```

la forma m√°s efectiva de copiar objetos es por medio de JSON.

const newObject = JSON.parse(JSON.stringfy(object));

con esto rompemos referencias de nivel y obtenemos un objeto completamente independiente del objeto copiado

usar concat podria ser una mejor alternativa

En realidad no veo aun el uso de esta accion pero igualmente es bueno conocer estos conceptos por si en algun momento lo pudiecemos necesitar.

me caí, me levando, me caí y me vuelvo a levantar. wow las cosas que uno se entera.

Interesante las formas de copiar.

UNA MEJOR FORMA DE HACERLO

const addToList = (list, item, quality) => {
	...list,
	{item, quaity}
}

Hola amigos, les comparto la practica para que prueben y vean que es lo pasa con estas dos formas de copiar objetos y hacerlos inmutables.

La lista inicial, se ve afectada.

const addToList = (list, item, quantity) => {
  list.push({
    item,
    quantity,
  });

  return list;
};

const listItems = [{ item: "Sabrita", quantity: 2 }];
const result = addToList(listItems, "Pepsi", 46);

console.log("Lista inicial:", listItems);
console.log("Lista final", result);

Pero si hacemos la inmutabilidad, se mantiene los datos de la primera lista intactos.

const addToList = (list, item, quantity) => {
  const newList = JSON.parse(JSON.stringify(list));

  newList.push({
    item,
    quantity,
  });

  return newList;
};

const listItems = [{ item: "Sabrita", quantity: 2 }];
const result = addToList(listItems, "Pepsi", 46);

console.log("Lista inicial:", listItems);
console.log("Lista final", result);

Es importante hacer la inmutabilidad para evitar que los datos cambien cuando no es realmente lo que deseamos. Existen muchos bugs referentes a este tema en los proyectos de software.

Esto es algo que yo siempre trato de hacer, de hecho por buenas prácticas los argumentos de las funciones no deberían ser mutados.

Hay excepciones obviamente, por ejemplo, en Vue, al trabajar con los mutators de Vuex, es literalmente obligatorio mutar el argumento que te pasa el mutator, pero lo dicho, son casos excepcionales ^^