¿Te encontraste alguna vez dudando si deberías lanzar una excepción o manejar el caso de otra forma? En este post te traigo una tabla con situaciones donde la decisión depende del contexto, ejemplos en PHP y consejos para que tu código sea más claro y mantenible.
No todo es blanco o negro cuando hablamos de excepciones. Hay situaciones donde lanzar una excepción puede ser válido… ¡pero también podrías resolverlo de otra manera! La clave está en el contexto y en la experiencia de usuario que quieras lograr.
Te dejo una tabla con casos típicos donde lanzar una excepción es opcional:
Caso | ¿Excepción? | Explicación breve |
---|---|---|
El usuario intenta actualizar un registro que fue modificado por otro | Opcional | Puede lanzarse excepción (concurrency) o resolver con merge/sobrescribir según la lógica. |
Límite de resultados superado en una consulta | Opcional | Puede devolverse un error o solo truncar la lista y avisar al usuario. |
Servicio externo no responde a tiempo | Opcional | Puede lanzarse excepción o reintentar/retornar valor por defecto. |
El usuario intenta realizar una acción fuera de horario permitido | Opcional | Puede lanzarse excepción o mostrar mensaje amigable sin interrumpir el flujo. |
Error al guardar un archivo temporal | Opcional | Puede lanzarse excepción o intentar guardar en otra ubicación. |
El sistema detecta un posible dato duplicado pero no es seguro | Opcional | Puede lanzar excepción o solo advertir y permitir continuar. |
El usuario cancela una operación en curso | Opcional | Puede lanzarse excepción para abortar o simplemente finalizar el proceso normalmente. |
Se detecta un warning en una operación matemática (overflow, underflow) | Opcional | Puede lanzarse excepción o solo registrar el warning y continuar. |
El usuario solicita un recurso que está en proceso de actualización | Opcional | Puede lanzarse excepción o retornar un estado de "en proceso" sin error. |
function actualizarRegistro($id, $datos, $versionActual) {
$registro = obtenerRegistro($id);
if ($registro->version !== $versionActual) {
// Opción 1: lanzar excepción
// throw new Exception("El registro fue modificado por otro usuario.");
// Opción 2: devolver un mensaje de advertencia
return [
'status' => 'warning',
'message' => 'El registro fue modificado, ¿desea sobrescribir?'
];
}
// Actualizar normalmente...
}
No todo es lanzar o no lanzar excepciones. Analizá el contexto, pensá en la experiencia de usuario y elegí la mejor opción para tu caso. ¿Te pasó alguna vez? ¡Contá tu experiencia en los comentarios!
Me dedico a crear soluciones web eficientes y a compartir mi conocimiento con la comunidad de desarrolladores.