Objetos e erros · unidade 12 de 27

Tratamento de erros

Tratar um erro não é escondê-lo.

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

Card 1 de 7: Tratamento de erros01 / 07

Leitura

Erros de domínio, contexto, cause, finally e retry como decisões de arquitetura.

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
throw new Error(
  "falha ao salvar pedido",
  { cause: error }
)

O que fica

  • Capture quando existir uma decisão real a tomar.
  • Preserve a causa e acrescente contexto operacional.
  • Retry precisa de limite e só serve para falhas transitórias.

Prática guiada.Leia, rode, quebre e explique cada exercício.

Prática guiada / unidade 12

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

divideOrThrow(a, b)

01 / Entenda

Enunciado

retorna a / b. Se b for 0, lança new Error("divisão por zero") (ou mensagem equivalente que mencione "divis").

02 / Implemente

Sua tentativa

Comece pela assinatura e resolva sem olhar a resposta.

ponto de partida
function divideOrThrow(a, b) {
  // Escreva sua solução aqui.
}

03 / Preveja

Entrada e saída

Use estes exemplos para entender o contrato antes de programar.

Entrada / chamada

divideOrThrow(10, 2)

Retorno esperado

5

Entrada / chamada

divideOrThrow(10, 0)

Erro esperado

lança /divis/i

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="divideOrThrow" exercises.test.js

Comportamentos cobertos

  • divide normalmente quando b é diferente de zero
  • lança erro ao dividir por zero
Ver código completo do teste
test("divideOrThrow: divide normalmente quando b é diferente de zero", () => {
  assert.equal(divideOrThrow(10, 2), 5);
});

test("divideOrThrow: lança erro ao dividir por zero", () => {
  assert.throws(() => divideOrThrow(10, 0), /divis/i);
});

Ainda travou?

Dicas graduais

Nível 2 — pista mais direta

divideOrThrow: if (b === 0) throw new Error("divisão por zero"); antes do return a / b;.

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 divideOrThrow(a, b) {
  throw new Error("not implemented: divideOrThrow");
}