Código de produção · unidade 25 de 27

Imutabilidade

Mude o resultado sem alterar a entrada.

8 min de leitura · 7 cards · 16 exercícios

Card 1 de 7: Imutabilidade01 / 07

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

exemplo.js
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.

Fundamentalexercício 01 / 16

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.

ponto de partida
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 direta

04 / Teste

Prove que funciona

O teste chama sua função e compara o resultado real com o esperado.

Como utilizar este teste

  1. 01Implemente a função usando exatamente o nome e os parâmetros do enunciado.
  2. 02Salve sua implementação em exercises.js, na mesma pasta do teste.
  3. 03Abra o terminal nessa pasta e execute o comando abaixo.
  4. 04Se falhar, compare “esperado” com “recebido”; essa diferença mostra o caso que precisa ser corrigido.
node --test --test-name-pattern="freezeConfig" exercises.test.js

Comportamentos 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

Esta área permanece livre em todos os exercícios. O código atual da unidade aparece abaixo para comparação com os testes e casos esperados.
código disponível
function freezeConfig(config) {
  return Object.freeze(config);
}