Utilizo excepciones para detectar problemas temprano. Por ejemplo:
public int getAverageAge(Person p1, Person p2){
if(p1 == null || p2 == null)
throw new IllegalArgumentException("One or more of input persons is null").
return (p1.getAge() + p2.getAge()) / 2;
}
Mi programa nunca debería pasar null
en esta función. Nunca tengo la intención de hacerlo. Sin embargo, como todos sabemos, suceden cosas involuntarias en la programación.
Lanzar una excepción si se produce este problema, me permite detectarlo y solucionarlo, antes de que cause más problemas en otros lugares del programa. La excepción detiene el programa y me dice "aquí pasaron cosas malas, arréglenlo". En lugar de que esto se null
mueva, el programa causa problemas en otros lugares.
Ahora, tiene razón, en este caso null
simplemente causaría un NullPointerException
inmediato, por lo que podría no ser el mejor ejemplo.
Pero considere un método como este, por ejemplo:
public void registerPerson(Person person){
persons.add(person);
notifyRegisterObservers(person); // sends the person object to all kinds of objects.
}
En este caso, a null
como parámetro se pasaría por el programa y podría causar errores mucho más tarde, lo que será difícil de rastrear hasta su origen.
Cambiando la función así:
public void registerPerson(Person person){
if(person == null) throw new IllegalArgumentException("Input person is null.");
persons.add(person);
notifyRegisterObservers(person); // sends the person object to all kinds of objects.
}
Me permite detectar el problema mucho antes de que cause errores extraños en otros lugares.
Además, una null
referencia como parámetro es solo un ejemplo. Podría haber muchos tipos de problemas, desde argumentos inválidos hasta cualquier otra cosa. Siempre es mejor detectarlos temprano.
Entonces mi pregunta es simple: ¿es esta una buena práctica? ¿Es bueno el uso de excepciones como herramientas para prevenir problemas? ¿Es esta una aplicación legítima de excepciones o es problemática?