Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Cual es la ventaja de las excepciones?

Estas en el tema de Cual es la ventaja de las excepciones? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, después de mucho darle vuelta no logro entenderlo. Por ejemplo, cual es la ventaja de un try/catch frente a como lo haría habitualmente... @import ...
  #1 (permalink)  
Antiguo 18/06/2013, 22:11
 
Fecha de Ingreso: abril-2012
Mensajes: 79
Antigüedad: 12 años
Puntos: 0
Cual es la ventaja de las excepciones?

Hola, después de mucho darle vuelta no logro entenderlo.

Por ejemplo, cual es la ventaja de un try/catch frente a como lo haría habitualmente...

Código PHP:
Ver original
  1. if(exito)
  2. {
  3. // ...
  4. }else{
  5. echo(error);
  6. }

En fin, esa seria mi duda, perdón por lo elemental que pueda ser y gracias desde ya.
  #2 (permalink)  
Antiguo 18/06/2013, 22:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Cual es la ventaja de las excepciones?

La ventaja es que las excepciones las puedes cachar en código, y aparte estas burbujean por tu código, son muy útiles para el manejo de errores y poder tener más control del flujo de tu código, así como para el debug y logging de tu aplicación.
  #3 (permalink)  
Antiguo 18/06/2013, 22:29
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Cual es la ventaja de las excepciones?

Las excepciones te sirven para capturar errores en tiempo de ejecución y te permiten tener el control para finalizar el script o realizar alguna otra acción alternativa.

El ejemplo que pones parece más como el mensaje que le mostrarías a un usuario si no llenó correctamente un formulario, es algo muy diferente.

Ejemplo:
Código:
try {
      // En este bloque intentarás conectarte al servidor de base de datos
      // Y seleccionar una base de datos
} catch {
      // Si hubo un error en la conexión
      // Finalizas el script con un texto personalizado
      // Algo como la ballena de Twitter cuando no hay conexiones disponibles
}
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 19/06/2013, 05:56
 
Fecha de Ingreso: abril-2012
Mensajes: 79
Antigüedad: 12 años
Puntos: 0
Respuesta: Cual es la ventaja de las excepciones?

Cita:
Iniciado por Triby Ver Mensaje
Código:
try {
      // En este bloque intentarás conectarte al servidor de base de datos
      // Y seleccionar una base de datos
} catch {
      // Si hubo un error en la conexión
      // Finalizas el script con un texto personalizado
      // Algo como la ballena de Twitter cuando no hay conexiones disponibles
}
Cual sería la diferencia con hacerlo así

Código:
if(se_conecto_a_la_bd)
{
ejecutar consulta
}else{
mostrar error
}
  #5 (permalink)  
Antiguo 19/06/2013, 08:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Cual es la ventaja de las excepciones?

Como te digo las excepciones suben como burbujas, no siempre vas a a poder testear directamente, imaginate que tienes una clase "VentaDeAutos" esta a su vez usa muchas dependencias, y muy dentro tiene una que usa una clase BD para conectarse.

El estar devolviendo un booleano de error hace el código bastante feo, imagínate algo así:
Código PHP:
Ver original
  1. class VentaDeAutos
  2. {
  3.     public function listaAutosEnVenta()
  4.     {
  5.         $buscador = new Buscador();
  6.         $buscador->listaAutos($tipo = 'venta');
  7.     }
  8. }
  9.  
  10. class Buscador
  11. {
  12.     public function listaAutos($tipo)
  13.     {
  14.         $db = new BD();
  15.         $db->conectar();
  16.         $db->query($algo);
  17.     }
  18. }
  19.  
  20. class BD
  21. {
  22.     public function conectar()
  23.     {
  24.         if (!$algo) {
  25.             throw new \RuntimeException('No se pudo conectar a la base de datos');
  26.         }
  27.     }
  28. }
  29.  
  30. try {
  31.     $autos = new VentaDeAutos();
  32.     $autos->listaAutosEnVenta();
  33. } catch (\RuntimeException $e)
  34. {
  35.     logger($e);
  36.     imprime_mensaje_error($e->getMessage());
  37. }

Si fura más limpio como propones, tendrías que estar comparando el tipo devuelto por cada método para ver si es un booleano e irlo "subiendo" por las clases hasta poder mostrar el mensaje de error.

El tener excepciones hace más limpio el diseño, a demás de que ayuda mucho al polimorfismo de cada clase, porque si muestras el error con diseño html, etc dentro de la clase BD estas rompiendo con el polimorfismo de la clase BD ya que su responsabilidad no es esa, es solamente interactuar con la base de datos. Además te ayuda mucho a desacoplar tus clases y a re-utilizar tus diseños en diferentes proyectos, eso es el núcleo de un diseño solido.

Saludos.

Última edición por GatorV; 19/06/2013 a las 08:22
  #6 (permalink)  
Antiguo 26/06/2013, 21:11
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Cual es la ventaja de las excepciones?

Segun entiendo...

Usar excepciones permite separar un codigo que puede ser muy extenso y ser proclive a romperse por muchos puntos del control y reporte de errores.

Los bloques Try-catch deberian (pregunto) ser tan extensos como ..... toda o casi-toda una funcion o metodo (?) o en las partes donde hay muchos posibles puntos de ruptura juntos ? ejemplo manejando archivos que puede pasar que no exista el directorio, que no tenga permisos de escritura, que el archivo ya exista...etc..


Cita:
El tener excepciones hace más limpio el diseño, a demás de que ayuda mucho al polimorfismo de cada clase, porque si muestras el error con diseño html, etc dentro de la clase BD estas rompiendo con el polimorfismo de la clase BD ya que su responsabilidad no es esa, es solamente interactuar con la base de datos. Además te ayuda mucho a desacoplar tus clases y a re-utilizar tus diseños en diferentes proyectos
Esa parte me gusto mucho, segun entiendo capturo el burbujeo a nivel de representacion en vez de in-situ.


Agradezco desde ya con la duda, tambien estoy flojo en el tema.


PD: aprovecho para agradecer lo que me han ayudado en estos años, recien estube revisando hilos y encontre muchos casos donde han gastado mucho tiempo en escribir ejemplos para guirarme. GRACIAS!
__________________
Salu2!

Última edición por Italico76; 26/06/2013 a las 21:34
  #7 (permalink)  
Antiguo 26/06/2013, 22:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Cual es la ventaja de las excepciones?

Los bloques try/catch por lo general deben de ir donde deseas capturar un posible fallo y sepas que puedes recuperar el control de la aplicación, si no, no es necesario es mejor burbujear las excepciones para cacharlas donde realmente sea necesario.

Etiquetas: php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:35.