Objetos e erros · unidade 12 de 27
Tratamento de erros
Tratar um erro não é escondê-lo.
01 / 07Use as setas do teclado ou deslize
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
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.
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.
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
5Entrada / chamada
divideOrThrow(10, 0)Erro esperado
lança /divis/i04 / 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="divideOrThrow" exercises.test.jsComportamentos 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
function divideOrThrow(a, b) {
throw new Error("not implemented: divideOrThrow");
}