10.1 Bloco try...catch
O tratamento de exceções é um aspecto importante da programação que ajuda a melhorar a robustez e a confiabilidade do código. No JavaScript, as palavras-chave try, catch, finally e throw são usadas para lidar com exceções. Na palestra, vamos explorar essas palavras-chave, sua sintaxe e exemplos de uso.
1. Bloco try...catch
A construção try...catch é usada para tratar erros que ocorrem no bloco de código try. Se ocorrer um erro no bloco try, o controle é passado para o bloco catch, onde o erro pode ser tratado.
Sintaxe:
try {
// Código que pode lançar uma exceção
} catch (error) {
// Código para tratar a exceção
}
Neste exemplo, embora a divisão por zero não cause um erro no JavaScript, se fosse outro tipo de erro (como acessar uma variável indefinida), o bloco catch lidaria com ele:
try {
let result = 10 / 0;
console.log(result);
} catch (error) {
console.error('An error occurred:', error);
}
10.2. Bloco finally
O bloco finally é usado para executar o código que deve ser executado independentemente de uma exceção ter ocorrido no bloco try ou não. O bloco finally segue o bloco catch.
Sintaxe:
try {
// Código que pode lançar uma exceção
} catch (error) {
// Código para tratar a exceção
} finally {
// Código que sempre será executado
}
Neste exemplo, a mensagem This will always execute. será exibida independentemente de um erro ter ocorrido ou não:
try {
let result = 10 / 0;
console.log(result);
} catch (error) {
console.error('An error occurred:', error);
} finally {
console.log('This will always execute.');
}
10. 3. Operador throw
O operador throw é usado para lançar exceções explicitamente. Com ele, você pode lançar erros personalizados.
Sintaxe:
throw expression;
Onde:
expression: qualquer expressão ou objeto que será lançado como uma exceção
Exemplo de uso
Neste exemplo, um erro é lançado se tentar dividir por zero, e o bloco catch trata esse erro:
function divide(a, b) {
if (b === 0) {
throw new Error('Division by zero is not allowed.');
}
return a / b;
}
try {
let result = divide(10, 0);
console.log(result);
} catch (error) {
console.error('An error occurred:', error.message);
}
10.4 Exemplos avançados e uso
Exemplo 1: Múltiplas exceções
Às vezes, diferentes tipos de erros podem ocorrer em um bloco try. Você pode tratá-los de maneiras diferentes usando as propriedades do objeto error.
Neste exemplo, tratamos um erro de sintaxe JSON separadamente de outros possíveis erros:
try {
JSON.parse('{ malformed JSON string }');
} catch (error) {
if (error instanceof SyntaxError) {
console.error('JSON Syntax Error:', error.message);
} else {
console.error('Unexpected Error:', error);
}
} finally {
console.log('Parsing attempt finished.');
}
Exemplo 2: Blocos try...catch aninhados
Você pode usar blocos try...catch aninhados para um tratamento de erro mais refinado.
Neste exemplo, o erro que ocorre no primeiro bloco try é tratado pelo bloco interno catch, que em seguida relança o erro para tratamento pelo bloco externo catch:
try {
try {
let result = divide(10, 0);
console.log(result);
} catch (innerError) {
console.error('Inner catch:', innerError.message);
throw innerError;
}
} catch (outerError) {
console.error('Outer catch:', outerError.message);
} finally {
console.log('Nested try...catch finished.');
}
function divide(a, b) {
if (b === 0) {
throw new Error('Division by zero is not allowed.');
}
return a / b;
}
Exemplo 3: Usando finally para liberar recursos
O bloco finally é útil para liberar recursos, como fechar arquivos ou finalizar conexões de rede.
Neste exemplo, o arquivo sempre será fechado, independentemente de ter ocorrido erro durante sua leitura ou não:
function readFile(filePath) {
let file;
try {
file = openFile(filePath); // Função para abrir o arquivo
// Trabalhar com o arquivo
} catch (error) {
console.error('Error reading file:', error.message);
} finally {
if (file) {
closeFile(file); // Função para fechar o arquivo
}
console.log('File processing finished.');
}
}
function openFile(path) {
// Lógica para abrir o arquivo
}
function closeFile(file) {
// Lógica para fechar o arquivo
}
readFile('path/to/file.txt');
O tratamento de exceções no JavaScript usando try, catch, finally e throw permite criar aplicações mais confiáveis e robustas. Compreender e usar corretamente essas construções ajuda a gerenciar erros de forma eficaz, liberar recursos e melhorar a experiência do usuário.
GO TO FULL VERSION