Ir al contenido principal

This is my blog, more about me at marianoguerra.github.io

🦋 @marianoguerra.org 🐘 @marianoguerra@hachyderm.io 🐦 @warianoguerra

este post es para vos...

ponedor de raises compulsivo

alguien con acceso al svn de emesene que no se quien es tiene la bendita constumbre de llenar el codigo de

raise ExcepcionReEspecificaHermosamenteHeredadaDeException( 'mensaje' )

¿alguno por ahi preguntara que tiene de mal eso?

bueno, desde mi punto de vista las siguientes cosas:

1) las excepciones no deberian pasar!:
si, exactamente, una excepcion se llama excepcion justamente por eso!, porque es algo que pasa pocas veces, no una vez cada 5 lineas en el codigo

veamos que dice la rae:

excepción.

(Del lat. exceptĭo, -ōnis).

1. f. Acción y efecto de exceptuar.

2. f. Cosa que se aparta de la regla o condición general de las demás de su especie.



se aparta de la regla!, no es como un if que lo necesitas, es para circunstancias que no podes controlar, como por ejemplo que estas leyendo de un socket y se corte la coneccion o algo asi, no que un parámetro no te gusto como venia.

ejemplo claro en el código:

esta persona esparció todo el modulo de manejo de contactos con estas preciosas excepciones, por ejemplo, si queres borrar un grupo que no existe EXCEPCION, si queres mover un usuario a un grupo que no existe EXCEPCION, si queres borrar un usuario que no existe EXCEPCION, y un millón mas.

vamos a analizar estas situaciones desde la perspectiva de un programador en C que no tiene excepciones, esta "pobre persona carente de una herramienta tan valiosa" diría:

- queres borrar un grupo que no existe? ok, no lo borro, si total no existe
- queres mover un usuario a un grupo que no existe? ok, no lo muevo

y así, si es ya un supremo guru de la programación le dará un mensaje de error al usuario y un debug por ahí para que el desarrollador se fije si no es su culpa.

2) si vas a lanzar una excepcion usa try catch!

lanzar excepciones es complemento de atraparlas, si tenes una retorcida adicción a lanzar excepciones haceme el favor de atraparlas, y si la vas a atrapar hace algo útil, no vale atraparla y no hacer nada, porque te apuesto $5 que es nada que hiciste causa una excepción 5 lineas mas abajo, tampoco vale atrapar la excepción mas genérica, o hacer una especie de:


try:
correrPrograma()
except Exception, ex:
print 'algo paso: ' + str( ex )


porque con eso no hacemos nada...

3) las excepciones no atrapadas cierran el programa, y eso para el usuario final es "tu programa se me colgó":

eso es malo, mientras vos decís "yo hice lo políticamente correcto, si vos ingresas una cantidad que no es un numero lanzo una CantidadFormatException", y ahí esta el problema, la solución no es una excepción, es un mensaje de error o un valor por defecto..

tenia mas números en mente pero ya me cansé, voy a commitear la versión del modulo sin excepciones.. :D

PD: para el desarrollador que hizo eso, no se sienta ofendido, solo considere mis anotaciones :D