Código de produção · unidade 25 de 27
Imutabilidade
Mude o resultado sem alterar a entrada.
01 / 07Use as setas do teclado ou deslize
Leitura
Freeze raso, cópias imutáveis, updates aninhados e métodos que modificam o original sem avisar.
No backend, esse fundamento aparece quando o código transforma entrada em decisão. O detalhe de linguagem deixa de ser acadêmico no momento em que altera um payload, uma regra de negócio ou a forma como uma falha chega à camada seguinte.
A forma mais útil de estudar é ligar a sintaxe a um contrato observável: o que entra, o que pode mudar, qual resultado sai e qual erro deve continuar o fluxo. É esse raciocínio que os exemplos e exercícios desta unidade procuram treinar.
Código
const next = {
...state,
profile: {
...state.profile,
city: "Salvador",
},
}O que fica
- Object.freeze protege apenas o primeiro nível.
- Cada nível alterado precisa de uma nova referência.
- Métodos como sort, push e Set.add mutam o valor original.
Prática guiada.Leia, rode, quebre e explique cada exercício.
Prática guiada / unidade 25
Um problema de cada vez.
Leia o contrato, escreva sua tentativa e confira os casos esperados. A resolução de referência permanece visível ao final de cada exercício.
freezeConfig(config)
01 / Entenda
Enunciado
retorna o próprio config depois de
aplicar Object.freeze, tornando suas propriedades de primeiro nível
somente leitura.
02 / Implemente
Sua tentativa
Comece pela assinatura e resolva sem olhar a resposta.
function freezeConfig(config) {
// Escreva sua solução aqui.
}03 / Preveja
Entrada e saída
Use estes exemplos para entender o contrato antes de programar.
Entrada / chamada
freezeConfig(config)Retorno esperado
congela o objeto e impede atribuição direta04 / Teste
Prove que funciona
O teste chama sua função e compara o resultado real com o esperado.
Como utilizar este teste
- 01Implemente a função usando exatamente o nome e os parâmetros do enunciado.
- 02Salve sua implementação em
exercises.js, na mesma pasta do teste. - 03Abra o terminal nessa pasta e execute o comando abaixo.
- 04Se falhar, compare “esperado” com “recebido”; essa diferença mostra o caso que precisa ser corrigido.
node --test --test-name-pattern="freezeConfig" exercises.test.jsComportamentos cobertos
- congela o objeto e impede atribuição direta
Ver código completo do teste
test("freezeConfig: congela o objeto e impede atribuição direta", () => {
const config = { retries: 3, timeoutMs: 1000 };
const frozen = freezeConfig(config);
assert.equal(Object.isFrozen(frozen), true);
assert.throws(() => {
frozen.retries = 99;
}, TypeError);
assert.equal(frozen.retries, 3);
});Ainda travou?
Dicas graduais
Nível 1 — direção, sem código
Para freezeConfig: qual método nativo torna um objeto somente leitura
no primeiro nível?
Nível 2 — pista mais direta
freezeConfig: return Object.freeze(config); já resolve — a função
não precisa copiar nada, só congelar o que recebeu.
05 / Compare
Resolução
function freezeConfig(config) {
return Object.freeze(config);
}