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 lançam exceções quando dados inválidos são 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 string representando o nome de usuário (username)
- Leia uma entrada de string representando o endereço de e-mail
- Leia uma entrada de string representando a idade como uma string
- Leia uma entrada de string representando a senha (password)
- Crie uma função chamada
validateUsernameque verifica 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 passar, imprima:
"Username validation passed" - Crie uma função chamada
validateEmailque verifica 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 passar, imprima:
"Email validation passed" - Crie uma função chamada
validateAgeque verifica se a idade é válida: - Converta a string da idade para um número 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 passar, imprima:
"Age validation passed" - Crie uma função chamada
validatePasswordque verifica se a senha é válida: - Se a senha for menor que 8 caracteres, lance a exceção:
"Password must be at least 8 characters long" - Se a validação passar, imprima:
"Password validation passed" - Chame cada função de validação em sequência e trate quaisquer exceções que ocorrerem
- Exiba os resultados no formato exato mostrado abaixo
Por exemplo, se as entradas forem "john", "john@email.com", "25", "password123", seu programa deve produzir a saída:
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 deve produzir a saída:
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 deve produzir a saída:
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: username, email, age e depois password. Interrompa a validação e exiba a mensagem de erro assim que qualquer validação falhar. Use a palavra-chave throw para disparar manualmente as 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 passar.
Folha de consulta
A palavra-chave throw permite que você dispare exceções manualmente quando seu programa encontra condições inválidas:
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
print("Age is valid: $age");
}Quando você usa o throw para lançar uma exceção, o programa interrompe a execução naquele ponto. Isso é útil para validar entradas e aplicar regras em funções, tornando seu código mais confiável e fácil de depurar.
Você pode lançar mensagens de string simples ou criar tipos de exceção mais específicos. Lançar exceções é particularmente valioso em funções de validação que precisam verificar entradas antes de prosseguir com operações importantes.
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 Segura