O Bloco 'try-catch'
Parte da seção Lógica & Fluxo do Journey de Dart da Coddy — lição 39 de 65.
Agora que você entende o que são exceções, vamos aprender como lidar com elas de forma elegante usando o bloco try-catch. Esta é a ferramenta fundamental que evita que seu programa trave quando algo dá errado.
O bloco try-catch funciona envolvendo o código potencialmente problemático em uma seção try. Se ocorrer uma exceção, em vez de travar o seu programa, o Dart pula imediatamente para a seção catch, onde você pode tratar o erro adequadamente.
try {
// Código que pode causar uma exceção
int number = int.parse("abc");
} catch (e) {
// Código que é executado se ocorrer uma exceção
print("Something went wrong: $e");
}Neste exemplo, tentar converter a string "abc" para um número inteiro normalmente causaria o travamento do seu programa. No entanto, como ela está envolvida em um bloco try, a exceção é capturada e tratada no bloco catch. A variável e contém informações sobre o que deu errado.
Esta abordagem permite que seu programa continue em execução mesmo quando ocorrem situações inesperadas, tornando seu código muito mais robusto e amigável ao usuário.
Desafio
FácilCrie um programa que converta com segurança strings de entrada do usuário em números usando um bloco try-catch. Seu programa deve lidar com casos em que a entrada pode não ser um número válido e evitar que o programa trave.
- Leia uma entrada de string que representa um número que precisa ser convertido em um número inteiro
- Use um bloco
try-catchpara tentar a conversão com segurança usandoint.parse() - Se a conversão for bem-sucedida, calcule o quadrado do número (multiplique-o por ele mesmo)
- Se a conversão falhar e ocorrer uma exceção, trate o erro de forma adequada
- Exiba o resultado apropriado ou a mensagem de erro no formato exato mostrado abaixo
Por exemplo, se a entrada for "5", seu programa deve produzir:
Processing input: 5
Conversion successful!
The square of 5 is: 25Se a entrada for "abc", seu programa deve produzir:
Processing input: abc
Error: Cannot convert 'abc' to a number
Please enter a valid integerSe a entrada for "12", seu programa deve produzir:
Processing input: 12
Conversion successful!
The square of 12 is: 144Seu programa deve usar um bloco try-catch para envolver a operação int.parse(). Na seção try, tente converter a string de entrada em um número inteiro e calcule seu quadrado. Na seção catch, trate qualquer exceção que ocorra durante a conversão e exiba uma mensagem de erro apropriada. O programa deve continuar rodando normalmente, independentemente de a conversão ser bem-sucedida ou falhar.
Folha de consulta
Use blocos try-catch para lidar com exceções de forma graciosa e evitar falhas no programa:
try {
// Código que pode causar uma exceção
int number = int.parse("abc");
} catch (e) {
// Código que é executado se ocorrer uma exceção
print("Something went wrong: $e");
}O bloco try contém código potencialmente problemático, enquanto o bloco catch lida com quaisquer exceções que ocorram. A variável e contém informações sobre a exceção.
Experimente você mesmo
import 'dart:io';
void main() {
// Ler a string de entrada
String? input = stdin.readLineSync();
// Display processing message
print('Processing input: $input');
// TODO: Escreva seu código abaixo
// Use o bloco try-catch para converter a entrada em inteiro com segurança
// Calcule o quadrado se a conversão for bem-sucedida
// Lide com quaisquer exceções que ocorram durante a conversão
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Manipulação Avançada de Listas
Propriedades de Lista: first & lastEstado da Lista: isEmpty & isNotEmptyInvertendo uma ListaAdicionando a uma Lista: insertRemoção em Listas: removeWhereBuscando em uma Lista: indexOfOrdenando uma ListaEmbaralhando uma ListaRecapitulação - Organizador de Listas4Manipulação Avançada de Mapas
Iterando sobre um MapVerificando Chaves e ValoresPropriedades do Map: keys & valuesAdição Condicional: putIfAbsentRemovendo Entradas de um MapMaps AninhadosRecapitulação - Atualização de Inventário2Operações Funcionais em Listas
Transformando com 'map'Filtrando com 'where'Usando '.toList()'Verificando Condições com 'any'Condições com 'every'Encontrando com 'firstWhere'Recapitulação - Filtragem de Dados5Projeto: Cálculo de Carrinho de Compras
Configuração do ProjetoAdicionando Itens ao Carrinho3Conjuntos
O que é um Conjunto?Criando um ConjuntoAdicionando e Removendo de ConjuntosVerificando Elementos em um ConjuntoConvertendo uma Lista para um ConjuntoUnião de ConjuntosInterseção de ConjuntosDiferença de ConjuntosRecapitulação - Lista de Convidados Únicos6Tratamento de Erros Básico
O que são Exceções?O Bloco 'try-catch'Capturando Exceções com 'on'O Bloco 'finally'Lançando uma ExceçãoRecapitulação - Divisão Segura