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

DervishD bugs en dervishd.net
Sab Mar 17 02:08:47 PDT 2007


    Hola Victor :)

 * Victor Moral <victor en taquiones.net> dixit:
> El Viernes, 16 de Marzo de 2007 12:48, DervishD escribió:
> 
> >     He estado ojeando el libro y probablemente me lo compre en cuanto
> > esté seguro de que mi mujer no me emasculará por comprar otro libro más
> > de chorradas de ordenadores XDDD
> 
> 	No es barato, desde luego, pero creo que merece la pena. 

    Sí, al final he picado y lo he comprado.
 
> > En general, coincido bastante con la política de Conway de "ya
> > sé que jode, pero las cosas hay que hacerlas bien". Lo que no
> > quiere decir que esté de acuerdo con todo lo que dice en su
> > libro, pero en lineas generales pensamos parecido.
> 
> Pues a mí me ha tenido que demostrar mucho que tenía razón, y al
> final se la he dado cuando he tenido que afrontar aplicaciones
> grandes :-)

    Es que hay que reconocer que, aunque puedes escribir código basura
en cualquier lenguaje, Perl invita mucho a escribir código que luego no
hay diox que lea. Este libro puede hacer mucho bien a la comunidad ;)))
Personalmente, e incluso aunque luego no se sigan todas sus
indicaciones, yo obligaría a cualquiera que vaya a programar en Perl a
leerlo. Evitaría mucho odio en el mundo XDD

> > Bueno, lo del "isa()" se pasa un poco por el forro la
> > encapsulación y no es buena práctica para un diseño orientado a
> > objetos, en mi opinión, pero entiendo el mecanismo y
> > personalmente también usaría isa() para gestionar, en lugar de
> > hacer un framework que obligase al llamante a usar una
> > implementación y diseños orientados a objeto. Es un buen
> > compromiso usar "isa()".
> 
> En realidad es fundamental para ello y no toca para nada la
> encapsulación. Si defines un conjunto de clases como estas:
[...]
> Puedes de un vistazo comprobar si el error tiene que ver con la
> configuración 

    Sí, si entiendo las ventajas, pero si no fuese por el hecho de que
"isa()" también devuelve verdadero si haces "$cosa->isa('Miclase')"
cuando "$cosa" es hija de "Miclase", si estarías rompiendo la
encapsulación y además no podrías usar especialización (término que
prefiero a "herencia"). Generalmente no se debería tener que conocer la
clase particular de un objeto, pero la cosa es que Perl permite usar
cualquier objeto en el lugar de cualquier otro, porque al fin y al cabo
no es más que una hash, así que lo de "isa()" es obligado.

> > Nunca he usado Exception::Class, pero le echaré un ojo. Soy bastante
> > reacio a usar módulos que no vengan en el core, así que (como soy un
> > capullo y lo sé y no me importa) igual me escribo algo similar para
> > colocarlo en mi Common.pm. Me gusta la abstracción de usar "throw"
> > en lugar de "die", que me parece mucho más intuitivo aunque sea sólo
> > un cambio de nombre. Y sí, ciertamente facilita la gestión de
> > excepciones.
> 
> Eso me pasaba a mí antes, que no quería utilizar nada que no viniese
> dentro de Perl, pero al final me he dado cuenta de que es un tanto
> absurdo no usar herramientas buenas y probadas. Lo que sí puede
> pasarte es que algo como "ví todo lo que había y nada me satisfizo" y,
> como dices, lo termines haciendo tú. :-)

    A mí lo que me fastidia es añadir dependencias en general. Si es
para mí, me da igual, me bajo el módulo de CPAN y lo instalo (a mano,
porque mi distro de Linux es "do-it-yourself" y lo tengo todo puesto a
mi gusto, así que nada de -MCPAN). Si lo voy a distribuir, me fastidia
un poco incluír un módulo de CPAN, sobre todo si voy a usar solo una
pequeña parte de él. En esos casos prefiero hacerlo yo.

> > Estoy acostumbrado a no usar depuradores paso a paso, suelo usar
> > otras técnicas y sólo recurro al debugger cuando no puedo evitarlo.
> > Además, se supone que gestionando los errores así deberías ahorrarte
> > bugs...
> 
> Bueno, más que ahorrarte errores los aislas y los tratas en zonas
> mucho más definidas que antes, que debías pasar hacia atrás un valor
> por ocho ó nueve capas de funciones. 

    Eso ya suele ser una ventaja enorme, y a eso me refería, que te
ahorras muchos "bug safaris" a la caza del gazapo de turno que te vuelve
loco.
 
> Por cierto, ¿ has utilizado Smart::Comments ? Tengo unas notas
> sobre ello y es otro mecanismo que empiezo a usar mucho:
> 
> http://taquiones.net/perl/cpan/smartcomments.html

    No, no los he usado y no eres el primero que me los recomienda. Les
echaré un vistazo.

> > Supongo que ningún código del que maneja excepciones de tu
> > trabajo está bajo licencia GPL o similar ¿me equivoco? Es que
> > estaría muy bien ver la propagación de excepciones en acción.
> 
> Sí, te equivocas, lo único que no es público es el repositorio
> de subversion, pero los paquetes Debian están disponibles:
> 
> http://www.venexma.net/debian/pool/main/i/impresor/

    Increíble, una empresa española liberando su código y encima
poniendo los paquetes de Debian... Chico, qué suerte tienes, al menos en
ese respecto.

> > Por cierto que hace un tiempo escribí un código de prueba para hacer
> > excepciones en C, usando setjmp y longjmp, pero lo dejé porque
> > aunque
> 
> Uf, tiempo hace de eso. Era un mecanismo muy divertido para trabajar
> con él.

    Sí, entretenía mucho XDDDD Depurar código que lleve setjmp y longjmp
es una experiencia inolvidable XD

> > funcionaba, había demasiados cabos sueltos, y es que intentar añadir
> > semántica try/throw/catch al C es una locura. Al final lo hice a la
> > forma C, con una librería de gestión de excepciones... que nunca
> > terminé (¿he hablado ya del vicio que tengo de procastinar?, pues
> > eso).
> 
> ¡ Qué me vas a contar ! Y antes todavía, pero ahora con la niña no hay
> manera :-)

    Sí, esa es una del millón de razones por las cuales no me reproduzco
XDDDD La más importante es no arrojar a este mundo a alguien que pueda
parecérseme ni remotamente, creo que la humanidad ya tiene bastante con
aguantar a uno como yo (y eso sin mencionar mi pobre material genético)
XDDDDD Espero que al menos disfrutes mucho de tu hija, que también dan
muchas satisfacciones simplemente existiendo y estando ahí :))

    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