Vamos a programar #53 - Errores y cómo tratarlos en c#

Hola de nuevo a todos, el día de hoy vamos a ver un poco acerca de cómo se tratan los errores en c#.

En repetidas ocasiones, he dicho que siempre que se crea código nuevo, por más que uno lleve años programando, siempre apareceran errores. Algunos tan sencillos cómo "¡Olvide una coma, un punto, importar un espacio de nombres!", otros no tan sencillos o que se haran presentes hast que se ejecute el programa en la computadora del usuario final.

El programador dispone de muchos mecanismos para reportar los detalles de las operaciones que se realizan. Algunas son tan simples cómo mostrar una caja de mesaje diciendo si la operacion se llevó a cabo de manera correcta o no y otras un tanto más complicadas cómo BSOD (blue screen of death)
Solo en tiempos recientes se ha cambiado el aspecto "temible" de antes
En el caso particular de C# (y .NET en lo general), dentro del lenguaje de programación se ofrecen las herramientas necesarias para poder manejar los errores. Antes de empezar a ver cómo se debe hacer el tratamiento, debemos de tomar en cuenta el tipo de error que se produce. Siempre habrán dos tipos de errores; uno será aquellos en los que se pueda continuar con la aplicación a pesar de que se ha producido y otro (y más grave), serán aquellos en los que ya no se puede continuar.

En este caso solo nos vamos a centrar en lo errores que son producidos por Software (código), imaginemos que tenemos un fragmento de código cómo el que sigue:

private void button1_Click(object sender, EventArgs e)
{
		int j = 0;
		int I = 100 / j;
}

A pesar de que el error es realmente inminente, si ejecutamos la aplicación y además hacemos click en botón, aparecerá un mensaje cómo el siguiente:
Si hacemos clic en continuar, la aplicación tratará de continuar, pero si no le es posible, simplemente mostrará el mensaje una y otra vez hasta el final de la ejecución (o en este caso, cada que se haga clic). Si hacemos clic en el botón salir, la aplicación se cerrará y la ejecución terminará.

Actualmente hay un debate muy fuerte en la comunidad de programadores. Cuando hay este tipo de errores, es decir cuando sabemos van a pasar, ¿es necesario crear un manejador de errores en este caso? Lo ideal sería evitar que se realice cualquier división entre cero, pero por mas repetitivo que suene, nunca es posible prever todas las variables.

Manejando los errores.

El objetivo del post es ver cómo tratar lo errores en .NET (c#), asi que veamos el siguiente código:

private void button1_Click(object sender, EventArgs e)
{
	try
	{
		int j = 0;
		int I = 100 / j;
	}
	catch(Exception Err)
	{
		MessageBox.Show(Err.Message+"\n En: "+Err.Source, "MDev 2018",MessageBoxButtons.OKCancel,MessageBoxIcon.Error);
	}
}

Es exactamente el mismo, solo que ahora agregamos las palabras reservadas try y catch. Todo el código que queremos ejecutar, lo debemos de poner dentro de try, en el caso del código anterior, la división la ponemos aquí, cuando se produce el error, toda la parte dentro del bloque catch, es la que se ejecutará y para este ejemplo, mostrará una caja de mensaje.
En su forma más simple, el bloque catch, se puede escribir sin los parámetros, pero si queremos obtener detalles acerca del error, creamos una variable del tipo Exception que posee algunos detalles del error.
Dependiendo del tipo de error, se puede definir un bloque catch diferente, al código anterior agreguemos un bloque catch pero con el error que esperamos, es decir: DivideByZeroException, al ejecutar el código en lugar de ver la caja de mensaje con el icono de error, veremos la que definimos cuando se produce DivideByZeroException.

private void button1_Click(object sender, EventArgs e)
{
	try
	{
		int j = 0;
		int I = 100 / j;
	}
	catch(DivideByZeroException)
	{
		MessageBox.Show("No puede divir entre cero");
	}
	catch(Exception Err)
	{
		MessageBox.Show(Err.Message+"\n En: "+Err.Source, "MDev 2018",MessageBoxButtons.OKCancel,MessageBoxIcon.Error);
	}
}

El resultado

Finalmente, en algunos casos aun cuando se produjo el error, debemos de liberar los recursos que se usaron (o cerrar archivos), para eso se dispone de la palabra reservada finally todo el bloque de código que contenga, es el que se ejecutará al final y usualmente se usa para este fin

Cómo ya lo mencioné, es importante decidir cuando es importante tomar medidas en caso de que un error ocurra, pero imaginemos que tenemos un formulario y en el una caja de texto en la cual el usuario ingresará su número de teléfono; es bien sabido que cualquier número telefónico esta conformado por números, entonces si al hacer las comprobaciones, notamos que hay algo que no es un número, de inmediato sabremos que algo no está bien y lo adecuado sería mostrar un mensaje informado de ese detalle y no hacer un manejador solo para ese error.

Y bien, por ahora es todo.Existen muchas maneras de tratar los errores pero con las vistas aquí, es más que suficiente, errores más graves requieren otro tratamiento, pero no suelen ser comunes.

Los leo luego.


No hay comentarios.