3 tipos de errores de programación y cómo evitarlos
Los errores de programación son fallas en el funcionamiento de las aplicaciones. Se les conoce comúnmente como "errores", de ahí el término "depuración".
Como desarrollador, pasará mucho tiempo corrigiendo errores. Varios de los errores que encontrará son comunes, y conocerlos lo ayudará a prevenirlos en primer lugar.
Esto es lo que necesita saber sobre estos tres tipos de errores de programación y cómo puede protegerse contra ellos:
1. Errores de ejecución o tiempo de ejecución
Estos son errores que ocurren cuando se está ejecutando un programa (es decir, en tiempo de ejecución). Pueden hacer que un programa no se ejecute correctamente o incluso que no se ejecute en absoluto.
Los errores fatales en tiempo de ejecución hacen que la ejecución del programa se detenga, mientras que los no fatales hacen que la ejecución finalice, pero con resultados incorrectos.
Un error típico en tiempo de ejecución es una división por error cero. Se supone que la división por cero produce un resultado infinito, pero desafortunadamente, todavía no hemos creado una estructura de datos que pueda almacenar esa cantidad de datos.
Por lo tanto, la división por cero conduce a una excepción aritmética en el compilador de Java.
2. Errores lógicos
Los errores lógicos se deben a un razonamiento defectuoso. Es importante tener en cuenta que estos errores no se deben necesariamente a un "error" que haya cometido. Pueden ocurrir porque no consideró un escenario de ejecución determinado.
Son los más difíciles de manejar. Esto se debe a que el código con un error lógico es un programa válido en el lenguaje en el que está escrito. Por lo tanto, no arrojará un error del compilador. El único problema es que produce resultados incorrectos.
Un error de lógica fatal hará que la ejecución del programa se detenga, mientras que uno no fatal permitirá que la ejecución del programa continúe pero con resultados incorrectos.
Un error lógico común es un error de uno en uno. Esto ocurre normalmente cuando se indica una condición de continuación de bucle. Supongamos que desea imprimir los primeros cinco números cuadrados.
Es posible que termine escribiendo el código a continuación en su bucle for, que proporciona solo los primeros cuatro números.
for( int x=1; x<5; x++){ System.out.ln(x*x); }
Para evitar tal error, puede usar el signo <=. El uso del signo menor o igual a es más intuitivo y, por lo tanto, es menos probable que mezcle sus operaciones relacionales.
Otro error lógico común es omitir las dos llaves de una declaración de control y, sin embargo, el cuerpo de abajo forma un bloque de código que está bajo su control.
Mira el ejemplo de abajo. Comprueba si un número aleatorio es par o impar, luego imprime una salida.
import java.util.Random;
public class OddEven{
public static void main(String[] args) {
Random numberGenerator = new Random();
int randomNumber = numberGenerator.nextInt(10);
if ((randomNumber%2)==0)
System.out.println("Here is your lucky number :" + randomNumber);
System.out.println("The number "+ randomNumber +" that you got is even"); // line 11
}
}
Fíjese en la línea 11. Siempre se ejecutará independientemente de si el número aleatorio que obtuvo es par. Por supuesto, esto sería lógicamente incorrecto cuando el número que obtuviste es impar.
Incluir ambas declaraciones System.out.println entre llaves {}, habría evitado esto.
Otro error lógico a tener en cuenta es no proporcionar una condición de terminación de bucle. Esto resultará en un ciclo infinito y su programa nunca terminará de ejecutarse.
3. Errores de sintaxis o en tiempo de compilación
Estos son errores causados por violaciones de las reglas del lenguaje de Java. También se denominan errores de compilación o en tiempo de compilación.
Estos son los errores más fáciles de manejar porque su compilador siempre los informará. Muchos compiladores incluso continúan y le dicen en la línea de su código donde está el error.
Tolerancia a fallos
Una forma práctica de lidiar con los problemas de software es emlpoyar la tolerancia a fallas incluyendo el manejo de excepciones. Puede usar declaraciones try..catch para lograr esto.
Para continuar con la ejecución del programa independientemente de la excepción atrapada en el bloque catch , use la sentencia finalmente .
La sintaxis es:
try{ // Block to execute if there are no issues }
catch (Exception e){
// Block to handle issues found
}finally{ // Block to execute after catch
}
Vea el ejemplo de código a continuación:
import java.util.Random;
public class RandomNumbers{
public static void main(String[] args) {
Random numberGenerator = new Random();
try{
for (int counter = 10; counter<=100; counter++){
int randomNumber = numberGenerator.nextInt(10);
System.out.println(counter/randomNumber); } }
catch(Exception e){
System.out.println("Division by zero encountered!");
}
finally{
System.out.println("Infinite value got");}
}
}
El programa anterior genera un número aleatorio entre cero y 10, y luego usa ese número para dividir un valor de contador entre 10 y 100. Si se encuentra una división por cero, el sistema detecta el error y muestra un mensaje.
Mejore la codificación
Es una buena práctica agregar comentarios a su código. Esto le ayudará a revisar fácilmente sus archivos cuando tenga un error. Un paso pequeño, pero muy importante, para desarrollar prácticas de codificación sólidas.
Con buenas prácticas de codificación, debería poder evitar errores de programación comunes.