Funções puras são boas
A chave para a imutabilidade é entender a noção de uma função pura. Uma função pura é aquela que sempre Retorna a mesma saída para uma determinada entrada. Diz -se que as funções puras são determinísticas, pois a saída é 100% previsível com base na entrada. Em termos mais simples, uma função pura é uma função sem efeitos colaterais. Isso nunca mudará algo pelas suas costas.
Todos nós tivemos essa experiência:
function addPie(items: string()) {
items.push("Apple Pie"); // side effect!
return items;
}
const order = ("Burger", "Fries");
const before = order;
const updated = addPie(order);
console.log("before:", before); // ("Burger", "Fries", "Apple Pie") ← oops
console.log("updated:", updated); // ("Burger", "Fries", "Apple Pie")
Observe o addPie função, que é impura e, portanto, tem um efeito colateral. Muda o items Array você envia. Como resultado, o before mudanças de referência também. Não é bom – você pode não esperar isso. Quando os dados são compartilhados, ser mutável transforma tudo em um alvo em movimento difícil de acertar.
Mas se a função fornece imutabilidade:
function addPieImmutable(items: string()) {
return (...items, "Apple Pie"); // no side effects, new array
}
const order = ("Burger", "Fries");
const before = order;
const updated = addPieImmutable(order);
console.log("before:", before); // ("Burger", "Fries") stable
console.log("updated:", updated); // ("Burger", "Fries", "Apple Pie")
Aqui, o before A referência permanece inalterada. Porque em vez de atualizar o pedido, criamos um novo (updated).
A mudança acontece
Agora, este é um exemplo trivial, mas você pode ver como na segunda versão, nunca pode haver uma condição de corrida ou uma batalha pelos dados, porque a ordem em si nunca muda. Em vez disso, a ordem é recriada. A imutabilidade não significa que nada muda; Isso significa que os valores nunca mudam uma vez criados. Você ainda “muda” rebelando um nome para um novo valor.
A noção de um estado “antes” e “depois” é fundamental se você quiser recursos como desfazer, rastreamento de auditoria e outras coisas que exigem um histórico completo de estado.
