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.
Desafío
FácilCrea 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.
- Lee una entrada de cadena que represente el nombre de usuario (username)
- Lee una entrada de cadena que represente la dirección de correo electrónico (email)
- Lee una entrada de cadena que represente la edad (age) como una cadena
- Lee una entrada de cadena que represente la contraseña (password)
- Crea una función llamada
validateUsernameque 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" - Crea una función llamada
validateEmailque 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" - Crea una función llamada
validateAgeque 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" - Crea una función llamada
validatePasswordque 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" - Llama a cada función de validación en secuencia y maneja cualquier excepción que ocurra
- 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: johnSi 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 errorsSi 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 errorsTu 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í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
1Manipulación avanzada de listas
Propiedades de listas: first y lastEstado de la lista: isEmpty y isNotEmptyInvertir una listaAñadir a una lista: insertEliminación en listas: removeWhereBúsqueda en una lista: indexOfOrdenar una listaMezclar una listaResumen - Organizador de listas4Manipulación avanzada de mapas
Iterar sobre un mapaComprobación de claves y valoresPropiedades del mapa: keys y valuesAdición condicional: putIfAbsentEliminar entradas de un mapaMapas anidadosResumen - Actualización de inventario2Operaciones funcionales con listas
Transformar con 'map'Filtrar con 'where'Uso de '.toList()'Comprobar condiciones con 'any'Condiciones con 'every'Búsqueda con 'firstWhere'Resumen - Filtrado de datos5Proyecto: Calculadora de carrito de compras
Configuración del proyectoAgregar artículos al carrito3Conjuntos
¿Qué es un Conjunto?Crear un ConjuntoAñadir y eliminar elementos de un ConjuntoComprobar elementos en un ConjuntoConvertir una lista en un ConjuntoUnión de ConjuntosIntersección de ConjuntosDiferencia de ConjuntosResumen - Lista de invitados única6Manejo básico de errores
¿Qué son las excepciones?El bloque 'try-catch'Capturar excepciones con 'on'El bloque 'finally'Lanzar una excepciónResumen - División segura