Menu
Coddy logo textTech

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.

challenge icon

Desafio

Fácil

Crie 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.

  1. Leia uma entrada de string representando o nome de usuário (username)
  2. Leia uma entrada de string representando o endereço de e-mail
  3. Leia uma entrada de string representando a idade como uma string
  4. Leia uma entrada de string representando a senha (password)
  5. Crie uma função chamada validateUsername que 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"
  6. Crie uma função chamada validateEmail que 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"
  7. Crie uma função chamada validateAge que 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"
  8. Crie uma função chamada validatePassword que 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"
  9. Chame cada função de validação em sequência e trate quaisquer exceções que ocorrerem
  10. 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: john

Se 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 errors

Se 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 errors

Seu 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 aqui
quiz iconTeste seus conhecimentos

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