[Madrid-pm] [RFC] Gestión de errores

DervishD bugs en dervishd.net
Vie Mar 16 02:05:14 PDT 2007


    Hola a todos :))

    La gestión de errores es algo que siempre me ha preocupado e
interesado, sobre todo en C y ahora ultimamente en Perl.

    No pretendo iniciar una discusión sobre cuál es la mejor gestión de
errores en plan religioso, sino más bien oir vuestras opiniones al
respecto y a ver si sacamos algo en claro ;))

    Hasta ahora en las cosas que he hecho tanto en C como en Perl y
otros lenguajes, he adoptado la postura de notificar los errores en un
valor de retorno, bien sea de una función, bien sea de un método de una
clase, aparte de otros mecanismos. Esto lo he hecho así porque
principalmente escribo bibliotecas y no programas como tales, y los
usuarios son vagos y las excepciones iban a cabrearles...

    Dicho esto, me estoy planteando cambiar el comportamiento de las
funciones de mi "Common.pm", que ahora mismo notifican los errores
mediante el valor de retorno. De hecho, las funciones que uso para
notificar errores usan "exit()" y no "die()", es decir, no lanzan
excepciones.

    Personalmente opino que las excepciones son la mejor forma de
gestión de errores, pero en C son difíciles de implementar ya que no
forman parte del lenguaje, y en Perl el "haz_esto or die" está muy
arraigado. Además, en Perl la gestión de excepciones con eval no es mi
preferida, pero bueno, eso dejémoslo estar.

    Lo que quería comentar con vosotros es lo siguiente: ¿preferís
notificar los errores a través de un valor de retorno o de una
excepción? Y si preferís esto último: ¿estilo tradicional, con texto en
$@, o mejor usando una referencia y pasando así información extendida y
estructurada al llamante? Esto último es lo que más me interesa, porque
aunque por ahí leáis que hay que construir una clase para usar este tipo
de excepciones, llamando a "die" con una referencia "blessed", no es
verdad, esa referencia no tiene por qué estar "blessed".

    ¿Qué opinais al respecto?

    Mi opinión es que me encantaría poder combinar ambas cosas, y hasta
cierto punto se puede hacer, usando "wantarray" y lanzando excepciones
siempre que la función se esté llamando en "void context", pero si uso
excepciones (en realidad mi preferida) prefiero usar siempre referencias
para poder estructurar la información que devuelve el error. Lo que no
tengo claro es si usaría una clase para ello o una simple referéncia
anónima a un hash.

    Gracias por vuestros comentarios :)

    Raúl Núñez de Arenas Coronado

-- 
Linux Registered User 88736 | http://www.dervishd.net
It's my PC and I'll cry if I want to... RAmen!


Más información sobre la lista de distribución Madrid-pm