J'utilise des exceptions pour détecter les problèmes tôt. Par exemple:
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;
}
Mon programme ne doit jamais passer null
dans cette fonction. Je n'en ai jamais l'intention. Cependant, comme nous le savons tous, des choses imprévues se produisent dans la programmation.
Lancer une exception si ce problème se produit, me permet de le repérer et de le corriger, avant qu'il ne cause plus de problèmes à d'autres endroits du programme. L'exception arrête le programme et me dit "de mauvaises choses sont arrivées ici, corrigez-le". Au lieu de cela, le null
déplacement du programme provoque des problèmes ailleurs.
Maintenant, vous avez raison, dans ce cas, null
cela provoquerait tout de suite un problème NullPointerException
, donc ce n'est peut-être pas le meilleur exemple.
Mais considérons une méthode comme celle-ci par exemple:
public void registerPerson(Person person){
persons.add(person);
notifyRegisterObservers(person); // sends the person object to all kinds of objects.
}
Dans ce cas, un null
paramètre as serait transmis au programme et pourrait provoquer des erreurs beaucoup plus tard, qui seront difficiles à retracer jusqu'à leur origine.
Changer la fonction comme ceci:
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 permet de repérer le problème bien avant qu'il ne provoque des erreurs étranges dans d'autres endroits.
De plus, une null
référence en tant que paramètre n'est qu'un exemple. Il peut y avoir plusieurs types de problèmes, des arguments invalides à autre chose. Il vaut toujours mieux les repérer tôt.
Ma question est donc simplement: est-ce une bonne pratique? Mon utilisation des exceptions comme outils de prévention des problèmes est-elle bonne? Est-ce une application légitime des exceptions ou est-ce problématique?