Uso le eccezioni per individuare i problemi in anticipo. Ad 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, le cose non intenzionali si verificano nella programmazione.
Lanciare un'eccezione se questo problema si verifica, mi consente di individuarlo e correggerlo, prima che causi più problemi in altri punti del programma. L'eccezione arresta il programma e mi dice "sono successe cose brutte qui, risolvilo". Invece di questo null
si sposta il programma causando problemi altrove.
Ora, hai ragione, in questo caso null
causerebbe semplicemente un NullPointerException
subito, quindi potrebbe non essere l'esempio migliore.
Ma considera un metodo come questo, ad 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
come parametro passerebbe attorno al programma e potrebbe causare errori molto più tardi, il che sarà difficile risalire all'origine.
Modifica della 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 consente di individuare il problema molto prima che causi strani errori in altri luoghi.
Inoltre, un riferimento null
come parametro è solo un esempio. Potrebbero essere molti tipi di problemi, da argomenti non validi a qualsiasi altra cosa. È sempre meglio individuarli prima.
Quindi la mia domanda è semplicemente: questa è una buona pratica? Il mio uso delle eccezioni come strumenti per la prevenzione dei problemi è buono? Si tratta di un'applicazione legittima di eccezioni o è problematica?