La palabra clave 'throw'
Parte de la sección Lógica y Flujo del Journey de C++ de Coddy — lección 50 de 56.
A veces necesitas señalar que ha ocurrido un error en tu propio código, en lugar de simplemente capturar excepciones lanzadas por otras funciones. La palabra clave throw te permite activar manualmente una excepción cuando tu programa detecta un problema.
Puedes lanzar diferentes tipos de valores como excepciones: enteros, cadenas o incluso objetos personalizados. Aquí tienes la sintaxis básica:
if (someErrorCondition) {
throw "Error message"; // Lanza un literal de cadena
}Cuando usas throw, el programa detiene inmediatamente la ejecución de la función actual y busca un bloque catch que pueda manejar el valor lanzado. Esto es particularmente útil para validar la entrada o comprobar condiciones que no deberían ocurrir durante la ejecución normal del programa.
Aquí tienes un ejemplo práctico de cómo lanzar una excepción al detectar una entrada no válida:
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
std::cout << "Age is valid: " << age << std::endl;
}La palabra clave throw te da control sobre cuándo y cómo se informan los errores en tus programas, haciendo que tus funciones sean más robustas y predecibles al tratar con condiciones no válidas.
Desafío
FácilCrea un programa que implemente la validación de entrada utilizando la palabra clave throw para activar excepciones manualmente cuando se detecten condiciones no válidas. Este desafío pondrá a prueba tu comprensión sobre cómo usar throw para señalar errores en tus propias funciones.
Se proporcionarán las siguientes entradas:
- Una cadena
usernameque representa el nombre de usuario elegido por un usuario - Un entero
ageque representa la edad del usuario
Tu programa debe:
- Crear una función llamada
validateUserque reciba una cadena y un entero como parámetros - Dentro de la función, verificar si el nombre de usuario está vacío (tiene longitud 0)
- Si el nombre de usuario está vacío, usar
throwcon la cadena"Username cannot be empty" - Verificar si la edad es menor que 13
- Si la edad es menor que 13, usar
throwcon la cadena"Age must be at least 13" - Si ambas validaciones son exitosas, imprimir
"User validation successful" - En la función principal, llamar a
validateUsercon los valores de entrada - Usar un bloque
trypara llamar a la función y un bloquecatchpara manejar cualquier excepción de cadena lanzada
Utiliza exactamente el siguiente formato de salida:
Para una validación exitosa:
User validation successfulPara errores de validación:
Validation error: [error_message]Recuerda que cuando usas throw, el programa detiene inmediatamente la ejecución de la función actual y busca un bloque catch coincidente. El bloque catch debe especificar el tipo const char* para manejar los literales de cadena lanzados. Si la primera validación falla, la función lanzará una excepción y no continuará verificando la segunda condición.
Hoja de referencia
La palabra clave throw le permite lanzar excepciones manualmente cuando su programa detecta un problema:
if (someErrorCondition) {
throw "Error message"; // Lanza un literal de cadena
}Cuando utiliza throw, el programa deja de ejecutar inmediatamente la función actual y busca un bloque catch que pueda manejar el valor lanzado.
Ejemplo de lanzamiento de una excepción para la validación de entrada:
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
std::cout << "Age is valid: " << age << std::endl;
}Puede lanzar diferentes tipos de valores como excepciones: enteros, cadenas u objetos personalizados. Utilice const char* en los bloques catch para manejar los literales de cadena lanzados.
Pruébalo tú mismo
#include <iostream>
#include <string>
using namespace std;
int main() {
// Leer entrada
string username;
int age;
cin >> username;
cin >> age;
// TODO: Escribe tu código aquí
// Crea la función validateUser e implementa la lógica de validación
// Usa bloques try-catch para manejar excepciones
return 0;
}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
1Punteros y memoria
¿Qué es un puntero?Operador de direcciónOperador de desreferenciaPunteros nulosPunteros y arraysMemoria dinámica con 'new'Liberar memoria con 'delete'Resumen: Práctica de punteros2Vectores (Arrays dinámicos)
Introducción a std::vectorCreación de un VectorAgregar elementosAcceder a los elementosTamaño del VectorIterar con un bucle ForBucle For basado en rangosEliminar elementosResumen - Operaciones con Vectores5Proyecto: Herramienta de inventario
Configuración del proyectoAgregar y actualizar artículos8Manejo básico de errores
Introducción a las excepcionesLos bloques 'try' y 'catch'La palabra clave 'throw'Diferentes tipos de excepcionesEl manejador genérico (catch-all)Repaso: División segura3Proyecto: Herramienta de lista de tareas
Descripción general del proyectoAñadir una tarea