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.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *