Lançando uma Exceção
Parte da seção Lógica & Fluxo do Journey de Dart da Coddy. Lição 42 de 65.
Às vezes, você precisa criar suas próprias condições de erro em seu código. A palavra-chave throw permite que você acione manualmente uma exceção quando seu programa encontra uma situação que não deve ter permissão para continuar.
Quando você throw uma exceção, você está essencialmente dizendo "pare tudo - algo está errado aqui." Isso é útil para validar entradas ou aplicar regras em suas funções. Você pode lançar uma mensagem de string simples ou criar tipos de exceção mais específicos.
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
print("Age is valid: $age");
}Neste exemplo, se alguém tentar passar uma idade negativa, a função lança imediatamente uma exceção com uma mensagem descritiva. Isso evita que o restante da função seja executado com dados inválidos, tornando seu código mais confiável e fácil de depurar.
Lançar exceções é particularmente valioso em funções que precisam validar suas entradas antes de prosseguir com operações importantes.
Desafio
FácilCrie um programa que valide as informações da conta do usuário implementando funções de validação personalizadas que lancem exceções quando dados inválidos forem detectados. Seu programa deve verificar vários campos da conta e lançar mensagens de erro específicas para diferentes falhas de validação.
- Leia uma entrada de texto representando o nome de usuário
- Leia uma entrada de texto representando o endereço de e-mail
- Leia uma entrada de texto representando a idade como texto
- Leia uma entrada de texto representando a senha
- Crie uma função chamada
validateUsernameque verifique se o nome de usuário é válido: - Se o nome de usuário estiver vazio ou tiver menos de 3 caracteres, lance a exceção:
"Username must be at least 3 characters long" - Se o nome de usuário contiver espaços, lance a exceção:
"Username cannot contain spaces" - Se a validação for aprovada, imprima:
"Username validation passed" - Crie uma função chamada
validateEmailque verifique se o e-mail é válido: - Se o e-mail não contiver o símbolo
@, lance a exceção:"Email must contain @ symbol" - Se o e-mail não contiver um ponto
.após o símbolo@, lance a exceção:"Email must contain a valid domain" - Se a validação for aprovada, imprima:
"Email validation passed" - Crie uma função chamada
validateAgeque verifique se a idade é válida: - Converta o texto da idade em um inteiro usando
int.parse() - Se a idade for menor que 13, lance a exceção:
"Age must be at least 13 years old" - Se a idade for maior que 120, lance a exceção:
"Age must be realistic (under 120)" - Se a validação for aprovada, imprima:
"Age validation passed" - Crie uma função chamada
validatePasswordque verifique se a senha é válida: - Se a senha tiver menos de 8 caracteres, lance a exceção:
"Password must be at least 8 characters long" - Se a validação for aprovada, imprima:
"Password validation passed" - Chame cada função de validação em sequência e trate quaisquer exceções que ocorrerem
- Exiba os resultados exatamente no formato mostrado abaixo
Por exemplo, se as entradas forem "john", "john@email.com", "25", "password123", seu programa deverá produzir:
Account Validation System
=========================
Validating username: john
Username validation passed
Validating email: john@email.com
Email validation passed
Validating age: 25
Age validation passed
Validating password: password123
Password validation passed
=========================
All validations passed successfully!
Account created for user: johnSe as entradas forem "jo", "john@email.com", "25", "password123", seu programa deverá produzir:
Account Validation System
=========================
Validating username: jo
Validation Error: Username must be at least 3 characters long
Account creation failed due to validation errorsSe as entradas forem "john doe", "johnemail.com", "12", "pass", seu programa deverá produzir:
Account Validation System
=========================
Validating username: john doe
Validation Error: Username cannot contain spaces
Account creation failed due to validation errorsSeu programa deve chamar cada função de validação na ordem exata: nome de usuário, e-mail, idade e, depois, senha. Interrompa a validação e exiba a mensagem de erro assim que qualquer validação falhar. Use a palavra-chave throw para disparar manualmente exceções com as mensagens de erro específicas mostradas acima. Cada função de validação deve verificar seu respectivo campo e lançar uma exceção se a validação falhar ou imprimir uma mensagem de sucesso se for aprovada.
Experimente você mesmo
import 'dart:io';
void main() {
// Ler entrada
String? username = stdin.readLineSync();
String? email = stdin.readLineSync();
String? age = stdin.readLineSync();
String? password = stdin.readLineSync();
print("Account Validation System");
print("=========================");
try {
// TODO: Criar a função validateUsername e chamá-la aqui
print("Validating username: $username");
// TODO: Criar a função validateEmail e chamá-la aqui
print("Validating email: $email");
// TODO: Criar a função validateAge e chamá-la aqui
print("Validating age: $age");
// TODO: Criar a função validatePassword e chamá-la aqui
print("Validating password: $password");
// TODO: Se todas as validações passarem, imprimir mensagens de sucesso
print("=========================");
print("All validations passed successfully!");
print("Account created for user: $username");
} catch (e) {
// TODO: Tratar exceções e imprimir mensagem de erro
print("Validation Error: $e");
print("Account creation failed due to validation errors");
}
}
// TODO: Escreva suas funções de validação aquiEsta 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 SeguraPratique por conta própria: Compilador de Dart online