Uso le eccezioni per rilevare in anticipo i problemi. Per esempio:
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;
}
Il mio programma non dovrebbe mai passare null
in questa funzione. Non ho mai intenzione di farlo. Tuttavia, come tutti sappiamo, nella programmazione accadono cose indesiderate.
Generare un'eccezione se si verifica questo problema, mi consente di individuarlo e risolverlo, prima che causi più problemi in altri punti del programma. L'eccezione interrompe il programma e mi dice "sono successe cose brutte qui, risolvile". Invece di null
spostarsi all'interno del programma causando problemi altrove.
Ora, hai ragione, in questo caso null
sarebbe semplicemente una causa NullPointerException
immediata, quindi potrebbe non essere il miglior esempio.
Ma considera un metodo come questo per esempio:
public void registerPerson(Person person){
persons.add(person);
notifyRegisterObservers(person); // sends the person object to all kinds of objects.
}
In questo caso, un null
parametro as verrebbe passato al programma e potrebbe causare errori molto più tardi, che sarà difficile risalire alla loro origine.
Cambiando la funzione in questo modo:
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.
}
Mi permette di individuare il problema molto prima che causi strani errori in altri luoghi.
Inoltre, un null
riferimento come parametro è solo un esempio. Potrebbero esserci molti tipi di problemi, da argomenti non validi a qualsiasi altra cosa. È sempre meglio individuarli presto.
Quindi la mia domanda è semplicemente: è questa buona pratica? Il mio uso delle eccezioni come strumenti di prevenzione dei problemi è buono? Si tratta di un'applicazione legittima di eccezioni o è problematica?