C++:
Manejo de errores
Cómo hacerlo:
Aquí tienes un bloque básico try-catch para manejar una excepción:
#include <iostream>
#include <stdexcept>
int main() {
try {
throw std::runtime_error("¡Ups! Algo salió mal.");
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
Salida de muestra:
Error: ¡Ups! Algo salió mal.
Inmersión Profunda
C++ ha tenido manejo de errores desde sus primeros días. La forma más básica era comprobar valores de retorno. Si has estado en esto por un tiempo, recordarás los días pre-estándar: C con clases y comprobación de errores manual.
Luego vinieron las excepciones con C++ para darnos una forma estructurada de lidiar con problemas inesperados. Una excepción se lanza con throw
y se captura con try/catch
.
Dos tipos de errores suelen surgir: errores lógicos, como un cálculo incorrecto, y errores de ejecución, como acceder a una dirección de memoria no válida. Las excepciones son ideales para errores de ejecución. Para errores lógicos, a menudo es mejor usar afirmaciones o códigos de error.
Hay un debate en curso sobre excepciones vs. códigos de error. Las excepciones pueden ser más lentas y pueden llevar a flujos de control complejos. Los códigos de error, aunque más rápidos, pueden hacer que el código esté abarrotado y sea más difícil de mantener. Es una compensación, por lo que conocer tu caso de uso es clave.
C++17 introdujo std::optional
y std::variant
, que son alternativas a las excepciones. Son útiles para funciones que pueden o no devolver un resultado válido.
La seguridad de las excepciones puede ser otro dolor de cabeza. Se trata de garantías que tu código proporciona a pesar de las excepciones. Hay tres niveles: básico, fuerte y nothrow. Cuantas más garantías, más complejo podría ser tu código.
Pensamientos finales: el manejo de errores es tanto arte como ciencia. Da forma a cómo tu aplicación sobrevive en el entorno real. No abuses de las excepciones. Apunta a un código legible y mantenible.