..."Esto es lo mismo que no capturar el error, en lugar de hacer esto no hagan
nada! ...
Es casi lo mismo. Lo que cambia es el origen de la excepción.
Examinando el stack trace, este muestra que el origen de la excepción es el
método donde se relanzó la misma. Si "no se hace nada", el stack trace muestra
el método donde realmente ocurrió la excepción como origen.
Es una diferencia sutil y francamente tampoco se me ocurren muchos escenarios
donde esto puede ser de utilidad, particularmente si se usa en la forma en que
lo estás mostrando, donde el Throw es la primera (o única) sentencia del Catch.
Donde si podría tener alguna justificación, es si fuera necesario registrar la
excepción pero no atraparla. Pero aún así, en ese caso es más común relanzar la
excepción pero manteniendo el origen. Esto se logra invocando Throw sin
especificar un parámetro. Por ejemplo,
Try
...
...
Catch ex As Exception
LogException(ex)
Throw ' aquí se relanza la excepción pero
manteniendo el stack trace
End Try
Saludos,
Fernando Tubio
----- Original Message -----
From: Damián Herrera
To: [email protected]
Sent: Friday, September 07, 2007 6:00 PM
Subject: [puntonet] Proclama para salvar instancias
Ya que estamos, yo también me sumo a la proclama!!!
Por todos los medios posibles evitar la siguiente estructura de código:
Try
...
...
Catch ex As Exception
Throw(ex)
...
End try
Esto es lo mismo que no capturar el error, en lugar de hacer esto no hagan
nada! Se van a ahorrar tiempo de procesamiento :) Si no, asegurense de hacer
los rollbacks o cancelar la operación antes de la línea "Throw(ex)".
Feliz fin de semana!
Damián Herrera
----------------------------------------------------------------------------
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Diego
Jancic
Sent: Friday, September 07, 2007 5:44 PM
To: [email protected]
Subject: [puntonet] Proclama para salvar instancias
Hola gente!,
Estoy modificando un programa que hicieron muchos programadores (incluidos
semi-seniors y seniors), y me canse de ver algunas cosas sin sentido.
Por ese motivo estoy realizando esta proclama general, para que si alguien
lo hace, lo evite la proxima vez. ;-)
Cuando tenemos un codigo de este estilo:
MiClase instancia = new MiClase();
instancia = UnServicio.ObtenerDesdeBD( . );
En ese caso, se estan creando 2 objetos cuando se deberia crear uno.
Fijense que la 2da linea sobrescribe completamente la primera!!
Y para agravar el problema, el metodo UnServicio.ObtenerDesdeBD hace algo
con el parecido pero llamando a la base de datos o a un WS o a donde sea.
Entonces se termina creando una instancia por capa, cuando en realidad se
necesita una sola (o ninguna si el metodo devuelve null)
Espero haberles ahorrado aunque sea 1 segundo de procesamiento en todo el
tiempo de vida de su aplicación.
Bueno, esto fue una pequeña contribución a todos ellos que por costumbre
repiten estas cosas desde hace mucho tiempo (ojo, hace bastante yo tambien lo
hacia!).
Saludos y Happy Programming!,
Diego