Tratamento de erros no JavaScript

Controle de Fluxo / Tutorial JavaScript

O tratamento de erros no JavaScript é feito principalmente com as estruturas try, catch, finally e a palavra-chave throw. Essas ferramentas permitem capturar e lidar com erros de forma controlada, evitando que eles interrompam a execução do programa.

Estrutura básica

A estrutura básica para tratar erros é a seguinte:

try {
    // Código que pode gerar um erro
} catch (erro) {
    // Código para lidar com o erro
} finally {
    // Código que será executado sempre, com ou sem erro (opcional)
}

Exemplo:

try {
    let resultado = 10 / 0
    console.log("Resultado:", resultado)
} catch (erro) {
    console.log("Ocorreu um erro:", erro.message)
} finally {
    console.log("Bloco finally executado.")
}

Saída:

Resultado: Infinity
Bloco finally executado.

Lançando erros com throw

Você pode usar a palavra-chave throw para lançar erros personalizados.

Exemplo:

function dividir(a, b) {
    if (b === 0) {
        throw new Error("Divisão por zero não é permitida.")
    }
    return a / b
}

try {
    console.log(dividir(10, 0))
} catch (erro) {
    console.log("Erro capturado:", erro.message)
}

Saída:

Erro capturado: Divisão por zero não é permitida.

Exemplos de cenários reais

Validar entrada do usuário

function validarIdade(idade) {
    if (idade < 0) {
        throw new Error("Idade não pode ser negativa.")
    }
    return "Idade válida."
}

try {
    console.log(validarIdade(-5))
} catch (erro) {
    console.log("Erro:", erro.message)
}

Saída:

Erro: Idade não pode ser negativa.

Ler JSON com erro de sintaxe

let json = '{"nome": "Arthur", "idade": 25' // JSON inválido

try {
    let dados = JSON.parse(json)
    console.log(dados)
} catch (erro) {
    console.log("Erro ao analisar JSON:", erro.message)
}

Saída:

Erro ao analisar JSON: Unexpected end of JSON input

Dicas práticas

  1. Use try...catch para capturar erros em operações críticas, como requisições de rede ou manipulação de arquivos.
  2. Sempre forneça mensagens de erro claras ao usar throw.
  3. O bloco finally é útil para liberar recursos, como fechar conexões ou limpar dados temporários.
  4. Evite capturar erros genéricos sem tratá-los adequadamente, pois isso pode mascarar problemas no código.

Com o tratamento de erros, você pode tornar seu código mais robusto e confiável. Experimente usar essas ferramentas para lidar com situações inesperadas no seu programa!