Dart:
Gerenciando erros
Como Fazer:
O Dart suporta dois tipos de erros: erros em tempo de compilação e erros em tempo de execução. Os erros de tempo de compilação são detectados pelo analisador Dart antes da execução do código, enquanto os erros de tempo de execução, ou exceções, ocorrem durante a execução. Veja como você pode tratar exceções em Dart:
Try-Catch
Use try-catch
para capturar exceções e prevenir que elas façam seu aplicativo falhar:
try {
var result = 100 ~/ 0; // Tentativa de divisão por zero, lança uma exceção
} catch (e) {
print('Exceção capturada: $e'); // Trata a exceção
}
Saída de exemplo: Exceção capturada: IntegerDivisionByZeroException
Exceção Específica
Para tratar exceções específicas, mencione a exceção após catch
:
try {
var result = 100 ~/ 0;
} on IntegerDivisionByZeroException {
print('Não é possível dividir por zero.'); // Trata especificamente exceções de divisão por zero
}
Saída de exemplo: Não é possível dividir por zero.
Rastreio de Pilha
Para obter um rastreio de pilha para depuração, use um segundo parâmetro no bloco catch:
try {
var result = 100 ~/ 0;
} catch (e, s) {
print('Exceção: $e');
print('Rastreio de pilha: $s'); // Imprime rastreio de pilha para depuração
}
Finally
Use finally
para executar código após try/catch, independentemente de uma exceção ter sido lançada ou não:
try {
var result = 100 ~/ 0;
} catch (e) {
print('Exceção capturada: $e');
} finally {
print('Isso é sempre executado.'); // Código de limpeza ou passos finais
}
Saída de exemplo:
Exceção capturada: IntegerDivisionByZeroException
Isso é sempre executado.
Bibliotecas de Terceiros
Embora a biblioteca central do Dart seja robusta para o tratamento de erros, você também pode usar pacotes de terceiros como dartz
para programação funcional que introduz conceitos como Either
e Option
que podem ser usados para tratamento de erros. Aqui está um exemplo usando dartz
para tratamento de erros:
- Adicione
dartz
ao seu arquivopubspec.yaml
sob dependências:
dependencies:
dartz: ^0.10.0
- Use
Either
para tratar erros de forma graciosa em seu código Dart:
import 'package:dartz/dartz.dart';
Either<String, int> divide(int dividendo, int divisor) {
if (divisor == 0) {
return Left('Não é possível dividir por zero.');
} else {
return Right(dividendo ~/ divisor);
}
}
void main() {
final result = divide(100, 0);
result.fold(
(left) => print('Erro: $left'),
(right) => print('Resultado: $right')
);
}
Saída de exemplo: Erro: Não é possível dividir por zero.
A parte Left
geralmente representa o erro, e a parte Right
representa o sucesso. Esse padrão permite tratar erros de uma maneira mais funcional, oferecendo clareza e controle sobre a gestão de erros.