Summary
Keywords
Full Transcript
Playlist: Curso Grátis de FLUTTER e DART Completo https://www.youtube.com/playlist?list=PL5EmR7zuTn_aX0pG4oWTyKKQT25Hkq2XG 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. }
