037 – Tratamento de Excessões – Exception no Dart – Curso de FLUTTER e DART
Playlist: Curso Grátis de FLUTTER e DART Completo
Curso de DART
Exceções
Seu código de dardo pode jogar e pegar exceções. Exceções são erros indicando que algo inesperado aconteceu. Se a exceção não for detectada, o isolado que gerou a exceção será suspenso e, normalmente, o isolado e seu programa serão encerrados.
Em contraste com o Java, todas as exceções do Dart são exceções não verificadas. Os métodos não declaram quais exceções eles podem lançar, e você não é obrigado a detectar exceções.
O Dart fornece tipos de exceção e erro, bem como vários subtipos predefinidos. Você pode, claro, definir suas próprias exceções. Entretanto, os programas Dart podem lançar qualquer objeto não nulo – não apenas objetos Exception and Error – como exceção.
Lançar
Veja um exemplo de lançamento ou de uma exceção:
throw FormatException (‘Esperado pelo menos 1 seção’);
Você também pode jogar objetos arbitrários:
jogue ‘Fora dos lhamas!’;
Nota: O código de qualidade de produção geralmente gera tipos que implementam Erro ou Exceção.
Como lançar uma exceção é uma expressão, você pode lançar exceções em instruções IGUAL MAIOR, bem como em qualquer outro lugar que permita expressões:
void distanceTo (ponto outro) IGUAL MAIOR throw UnimplementedError ();
Pegar
Capturar ou capturar uma exceção impede que a exceção se propague (a menos que você retome a exceção). Capturar uma exceção lhe dá a chance de lidar com isso:
experimentar
breedMoreLlamas ();
em OutOfLlamasException
buyMoreLlamas ();
Para lidar com código que pode lançar mais de um tipo de exceção, você pode especificar várias cláusulas catch. A primeira cláusula catch que corresponde ao tipo do objeto lançado manipula a exceção. Se a cláusula catch não especificar um tipo, essa cláusula poderá manipular qualquer tipo de objeto lançado:
experimentar
breedMoreLlamas ();
em OutOfLlamasException
// Uma exceção específica
buyMoreLlamas ();
na captura de exceção (e)
// Qualquer outra coisa que seja uma exceção
print (‘Exceção desconhecida: $ e’);
pegar (e)
// Nenhum tipo especificado, lida com todos
print (‘Algo realmente desconhecido: $ e’);
Como mostra o código anterior, você pode usar ou capturar ou ambos. Use quando precisar especificar o tipo de exceção. Use catch quando seu manipulador de exceções precisar do objeto de exceção.
Você pode especificar um ou dois parâmetros para catch (). A primeira é a exceção que foi lançada e a segunda é o rastreamento de pilha (um objeto StackTrace).
experimentar
// ···
na captura de exceção (e)
print (‘Detalhes da exceção: n $ e’);
pegar (e, s)
print (‘Detalhes da exceção: n $ e’);
print (‘Rastreio de pilha: n $ s’);
Para manipular parcialmente uma exceção, enquanto permite que ela se propague, use a palavra-chave rethrow.
void misbehave ()
experimentar
foo dinâmico = true;
print (foo ++); // Erro de tempo de execução
pegar (e)
print (‘misbehave () parcialmente manipulado $ e.runtimeType.’);
relançar; // Permitir que chamadores vejam a exceção.
void main ()
experimentar
portar-se mal ();
pegar (e)
print (‘main () terminou de lidar com $ e.runtimeType.’);
Finalmente
Para garantir que algum código seja executado ou não, uma exceção é lançada, use uma cláusula finally. Se nenhuma cláusula catch corresponder à exceção, a exceção será propagada após a execução da cláusula finally:
experimentar
breedMoreLlamas ();
finalmente
// Sempre limpe, mesmo que uma exceção seja lançada.
cleanLlamaStalls ();
A cláusula finally é executada após qualquer cláusula catch correspondente:
experimentar
breedMoreLlamas ();
pegar (e)
print (‘Erro: $ e’); // Lidar com a exceção primeiro.
finalmente
cleanLlamaStalls (); // Então limpe.