Médio JavaScript
Erro personalizado com finally
Enunciado
Crie uma classe SaldoInsuficienteError que estende Error. Implemente uma função sacar(saldo, valor) que lança esse erro se valor > saldo. Use try/catch/finally para exibir mensagens e garantir que uma mensagem de finalização sempre apareça.
Requisitos
SaldoInsuficienteErrordeve tername = 'SaldoInsuficienteError'e mensagem personalizada.- A função
sacardeve lançarSaldoInsuficienteErrorquandovalor > saldo. - O
catchdeve verificarinstanceof SaldoInsuficienteErrore imprimir'Erro: Saldo insuficiente'. - O
finallydeve imprimir'Operação finalizada'independentemente do resultado.
Código inicial
class SaldoInsuficienteError extends Error {
// seu código aqui
}
function sacar(saldo, valor) {
// seu código aqui
}
try {
// chame sacar com valores que gerem erro
} catch (erro) {
// trate o erro
} finally {
// mensagem final
}
Saída esperada
Erro: Saldo insuficiente
Operação finalizada
Ver dica
No construtor da subclasse, chame super(message) e defina this.name. Use instanceof no catch.
Mostrar solução
class SaldoInsuficienteError extends Error {
constructor(message) {
super(message);
this.name = 'SaldoInsuficienteError';
}
}
function sacar(saldo, valor) {
if (valor > saldo) {
throw new SaldoInsuficienteError('Saldo insuficiente para saque');
}
return saldo - valor;
}
try {
const novoSaldo = sacar(100, 150);
console.log('Novo saldo:', novoSaldo);
} catch (erro) {
if (erro instanceof SaldoInsuficienteError) {
console.log('Erro: Saldo insuficiente');
} else {
console.log('Erro inesperado:', erro.message);
}
} finally {
console.log('Operação finalizada');
}
Passo a passo
- Definimos a classe
SaldoInsuficienteErrorque estendeError. - No construtor, chamamos
super(message)para inicializar a mensagem e definimosthis.namepara identificar o tipo. - A função
sacarverifica se o valor do saque é maior que o saldo. - Se for, lança
SaldoInsuficienteErrorcom uma mensagem. - No
try, chamamossacar(100, 150), que lança o erro. - O
catchcaptura e verifica se é uma instância deSaldoInsuficienteErrorusandoinstanceof. - Se for, imprime a mensagem específica; caso contrário, trata como erro genérico.
- O bloco
finallysempre executa, imprimindo a mensagem final.
Por que funciona
A herança de Error permite criar erros específicos e usar instanceof para diferenciá-los. O finally garante que código de limpeza ou finalização seja executado mesmo se ocorrer erro ou se um return for encontrado no try.
Erros comuns
- Esquecer de chamar
super(message)no construtor da subclasse: isso causa erro de referência. - Não definir
this.name: o nome padrão será'Error', dificultando a identificação. - Colocar código que pode falhar no
finally: se ofinallylançar erro, ele substitui o erro original.
Outra forma de resolver
Poderia usar erro.name === 'SaldoInsuficienteError' em vez de instanceof, mas instanceof é mais robusto com herança.
Saída esperada
Erro: Saldo insuficiente
Operação finalizada