Menu
Coddy logo textTech

Lanzar una excepción

Parte de la sección Lógica y Flujo del Journey de Dart de Coddy — lección 42 de 65.

A veces necesitas crear tus propias condiciones de error en tu código. La palabra clave throw te permite activar manualmente una excepción cuando tu programa encuentra una situación que no debería permitir que continúe.

Cuando lanzas (throw) una excepción, estás diciendo esencialmente "detén todo - algo está mal aquí". Esto es útil para validar la entrada o aplicar reglas en tus funciones. Puedes lanzar un mensaje de cadena simple o crear tipos de excepción más específicos.

void checkAge(int age) {
  if (age < 0) {
    throw "Age cannot be negative!";
  }
  print("Age is valid: $age");
}

En este ejemplo, si alguien intenta pasar una edad negativa, la función lanza inmediatamente una excepción con un mensaje descriptivo. Esto evita que el resto de la función se ejecute con datos no válidos, lo que hace que su código sea más confiable y fácil de depurar.

Lanzar excepciones es especialmente valioso en funciones que necesitan validar sus entradas antes de proceder con operaciones importantes.

challenge icon

Desafío

Fácil

Crea un programa que valide la información de la cuenta de un usuario implementando funciones de validación personalizadas que lancen excepciones cuando se detecten datos inválidos. Tu programa debe verificar múltiples campos de la cuenta y lanzar mensajes de error específicos para diferentes fallos de validación.

  1. Lee una entrada de cadena que represente el nombre de usuario (username)
  2. Lee una entrada de cadena que represente la dirección de correo electrónico (email)
  3. Lee una entrada de cadena que represente la edad (age) como una cadena
  4. Lee una entrada de cadena que represente la contraseña (password)
  5. Crea una función llamada validateUsername que verifique si el nombre de usuario es válido:
    • Si el nombre de usuario está vacío o tiene menos de 3 caracteres, lanza la excepción: "Username must be at least 3 characters long"
    • Si el nombre de usuario contiene espacios, lanza la excepción: "Username cannot contain spaces"
    • Si la validación es exitosa, imprime: "Username validation passed"
  6. Crea una función llamada validateEmail que verifique si el correo electrónico es válido:
    • Si el correo electrónico no contiene el símbolo @, lanza la excepción: "Email must contain @ symbol"
    • Si el correo electrónico no contiene un punto . después del símbolo @, lanza la excepción: "Email must contain a valid domain"
    • Si la validación es exitosa, imprime: "Email validation passed"
  7. Crea una función llamada validateAge que verifique si la edad es válida:
    • Convierte la cadena de edad a un entero usando int.parse()
    • Si la edad es menor de 13, lanza la excepción: "Age must be at least 13 years old"
    • Si la edad es mayor de 120, lanza la excepción: "Age must be realistic (under 120)"
    • Si la validación es exitosa, imprime: "Age validation passed"
  8. Crea una función llamada validatePassword que verifique si la contraseña es válida:
    • Si la contraseña tiene menos de 8 caracteres, lanza la excepción: "Password must be at least 8 characters long"
    • Si la validación es exitosa, imprime: "Password validation passed"
  9. Llama a cada función de validación en secuencia y maneja cualquier excepción que ocurra
  10. Muestra los resultados en el formato exacto que se muestra a continuación

Por ejemplo, si las entradas son "john", "john@email.com", "25", "password123", tu programa debería mostrar:

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

Si las entradas son "jo", "john@email.com", "25", "password123", tu programa debería mostrar:

Account Validation System
=========================
Validating username: jo
Validation Error: Username must be at least 3 characters long
Account creation failed due to validation errors

Si las entradas son "john doe", "johnemail.com", "12", "pass", tu programa debería mostrar:

Account Validation System
=========================
Validating username: john doe
Validation Error: Username cannot contain spaces
Account creation failed due to validation errors

Tu programa debe llamar a cada función de validación en el orden exacto: username, email, age, y luego password. Detén la validación y muestra el mensaje de error tan pronto como falle cualquier validación. Usa la palabra clave throw para activar manualmente las excepciones con los mensajes de error específicos mostrados anteriormente. Cada función de validación debe verificar su campo respectivo y lanzar una excepción si la validación falla, o imprimir un mensaje de éxito si pasa.

Hoja de referencia

La palabra clave throw te permite activar excepciones manualmente cuando tu programa encuentra condiciones no válidas:

void checkAge(int age) {
  if (age < 0) {
    throw "Age cannot be negative!";
  }
  print("Age is valid: $age");
}

Cuando usas throw para lanzar una excepción, el programa detiene la ejecución en ese punto. Esto es útil para validar entradas y aplicar reglas en las funciones, haciendo que tu código sea más confiable y fácil de depurar.

Puedes lanzar mensajes de cadena simples o crear tipos de excepciones más específicos. Lanzar excepciones es particularmente valioso en funciones de validación que necesitan verificar las entradas antes de proceder con operaciones importantes.

Pruébalo tú mismo

import 'dart:io';

void main() {
  // Leer entrada
  String? username = stdin.readLineSync();
  String? email = stdin.readLineSync();
  String? age = stdin.readLineSync();
  String? password = stdin.readLineSync();
  
  print("Account Validation System");
  print("=========================");
  
  try {
    // TODO: Crear la función validateUsername y llamarla aquí
    print("Validating username: $username");
    
    // TODO: Crear la función validateEmail y llamarla aquí
    print("Validating email: $email");
    
    // TODO: Crear la función validateAge y llamarla aquí
    print("Validating age: $age");
    
    // TODO: Crear la función validatePassword y llamarla aquí
    print("Validating password: $password");
    
    // TODO: Si todas las validaciones pasan, imprimir mensajes de éxito
    print("=========================");
    print("All validations passed successfully!");
    print("Account created for user: $username");
    
  } catch (e) {
    // TODO: Manejar excepciones e imprimir mensaje de error
    print("Validation Error: $e");
    print("Account creation failed due to validation errors");
  }
}

// TODO: Escribe tus funciones de validación aquí
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo