El jefe de mi compañía dice que debo escribir todo, es decir TODO mi código dentro de las declaraciones Try-catch. Ahora, puedo entender el enfoque de `` más vale prevenir que curar '' aquí, pero ¿no es demasiado descabellado pensar que habrá una excepción cuando se creen las Etiquetas, la posición del formulario está establecida? Ha habido casos en los que las excepciones en operaciones tan simples.
code-reviews
Chipre
fuente
fuente
Respuestas:
Bueno, esto es un poco exagerado y solo conduce a un código ruidoso. ¿Cuáles son los beneficios de tener todo el código (cada método, por ejemplo) escrito con un controlador try catch? Simplemente le dice que hay un error que se debe corregir en la mayoría de los casos. Muchas veces, la excepción puede y debe evitarse en primer lugar.
Una mirada en el seguimiento de la pila es mayormente suficiente para revelar la causa en su código, incluso si el método de falla no realiza la captura en sí. Hay ocasiones en que los desarrolladores corrompen los rastros de la pila en excepciones, pero ese es mucho más a menudo el caso cuando tienes muchos manejadores de excepciones. Como cualquier cosa: un poco es bueno, pero demasiado es veneno.
El manejo de excepciones es bastante simple:
Capturar excepciones
Si lo piensas bien, siempre hay un solo lugar que es bueno para manejar una excepción que ocurre. Y así, el controlador debe estar en ese lugar.
En primer lugar, ni siquiera se deben lanzar muchas excepciones, así que no construya sus estructuras de control en torno al manejo de excepciones, más bien trate de evitar la posible aparición de excepciones siempre que sea posible.
Recuerde chocar temprano cuando las cosas van (irreparablemente) mal. Poner todo el código en las declaraciones try-catch es absurdo, pero no olvide informar y registrar TODAS las excepciones.
fuente
¡Absolutamente sí! Siempre hay una manera de que las cosas salgan mal que no previste. Y "corazón de pollo" es una expresión ridícula para usar en este contexto; El desarrollo de software no se trata de demostrar su machismo ignorando posibles problemas.
Lo que es una pregunta válida es si es útil que las excepciones se capturen en el punto donde sus estándares de codificación dicen que tienen que hacerlo. Su declaración dice que debe tener un bloque try / catch alrededor de cada cuerpo de método, y eso es realmente absurdo porque a menudo no puede hacer algo útil de inmediato con una excepción, y ese es realmente el punto de excepciones: que puede elegir dejarlos propagar la pila de llamadas a tratar en el punto apropiado.
fuente
Yo cambiaría esto al revés. Sí, como regla general, el manejo de excepciones es algo bueno, pero ¿ puede manejar cada excepción posible de manera sensata en el punto en que se detecta? A veces, particularmente si no está escribiendo software de misión crítica, es mejor simplemente bloquearse y quemarse de una manera controlada a mitad de camino cuando las cosas van terriblemente mal.
Si no puede estar 100% seguro de que puede manejar cada una de las excepciones que posiblemente puedan detectarse, probablemente sea mejor escribir algún tipo de controlador de excepciones general, envolviendo el ciclo principal del programa, la mecánica exacta de cómo hacerlo obviamente depende del idioma en el que esté trabajando. Allí, registre tantos detalles sobre la excepción como pueda, guarde el estado del programa (en otro lugar que no sea el almacén de datos con el que el usuario está trabajando actualmente; recuerde, todo puede estar dañado en este punto ), y así. Luego, vuelva a lanzar la excepción y deje que el SO la maneje como lo considere conveniente. En este controlador de excepciones general, prepárate para una falla catastrófica. Luego, cuando se reinicie el programa, observe si este estado es de alguna manera útil y restaure lo que se puede recuperar si lo es; y posiblemente ofrezca al usuario que le envíe un informe de error.
fuente
En general, el uso de try / catch está en desuso, porque el bloque catch es muy costoso desde el punto de vista de los recursos. El uso de Try / catch me recuerda la gestión de riesgos . La gestión de riesgos tiene dos dimensiones:
Ahora, si sales de tu casa, es muy poco probable que un piano caiga sobre tu cabeza en algún lugar (tal vez 0.001%), pero puede matarte.
El manejo de excepciones es así. Intentar bloquear no es caro. Pero catch block es realmente costoso, ya que necesita crear una tabla de seguimiento de pila y hacer otras cosas. Por lo tanto, al tomar una decisión sobre los bloques try / catch, debe considerar cuántas veces probablemente golpee el bloque catch. Si entre 10,000 usos, solo lo golpeas 1 vez, entonces úsalo. Pero si se trata de un formulario, y el usuario probablemente no lo llena correctamente un 50% de las veces, entonces debe evitar poner un bloque try / catch en acción allí.
En lugares donde la probabilidad de ocurrencia de excepción es alta, se recomienda usar
if {} else {}
bloques para evitar la ocurrencia de excepción. Por ejemplo, donde desea dividir dos números, en lugar de escribir:Deberías escribir:
fuente
Deberías usar try-catch cuando sea apropiado, pero por favor, oh, no captures todas las excepciones y ni siquiera lo registres. En ese punto, es olor a código y trabajo de mala calidad.
fuente
Personalmente no soporto las excepciones, son MUY, MUY, MUY difíciles de manejar correctamente. ¡Y tratar de corregir los datos corruptos es MUY, MUY, MUY difícil!
http://blogs.msdn.com/b/mgrier/archive/2004/02/18/75324.aspx
http://blogs.msdn.com/b/oldnewthing/archive/2004/04/22/118161.aspx
http://blogs.msdn.com/b/oldnewthing/archive/2005/01/14/352949.aspx
http://www.joelonsoftware.com/items/2003/10/13.html
Si no llama a todas las funciones como:
No hay forma de que limpie correctamente en cada punto de salida. ¡Las excepciones son DURAS!
Lo único bueno de las excepciones es que si no las detecta, la aplicación se bloquea por un comportamiento inesperado.
fuente