Używam wyjątków, aby wcześnie wychwytywać problemy. Na przykład:
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;
}
Mój program nigdy nie powinien przejść null
tej funkcji. Nigdy tego nie zamierzam. Jednak, jak wszyscy wiemy, w programowaniu zdarzają się niezamierzone rzeczy.
Zgłoszenie wyjątku, jeśli wystąpi ten problem, pozwala mi go wykryć i naprawić, zanim spowoduje więcej problemów w innych miejscach programu. Wyjątek zatrzymuje program i mówi mi: „wydarzyły się tutaj złe rzeczy, napraw je”. Zamiast tego null
poruszać się po programie, powodując problemy w innym miejscu.
Masz rację, w tym przypadku po null
prostu spowodowałoby to NullPointerException
od razu, więc może nie być najlepszym przykładem.
Ale rozważ taką metodę jak na przykład:
public void registerPerson(Person person){
persons.add(person);
notifyRegisterObservers(person); // sends the person object to all kinds of objects.
}
W takim przypadku null
parametr a byłby przekazywany dookoła programu i może powodować błędy znacznie później, co będzie trudne do odtworzenia.
Zmiana funkcji tak:
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.
}
Pozwala mi dostrzec problem znacznie, zanim spowoduje dziwne błędy w innych miejscach.
Ponadto, null
odniesienia jako parametr jest jedynie przykładem. Może to być wiele problemów, od nieprawidłowych argumentów po cokolwiek innego. Zawsze lepiej jest je wcześnie wykryć.
Więc moje pytanie brzmi: czy to dobra praktyka? Czy moje wykorzystanie wyjątków jako narzędzi zapobiegających problemom jest dobre? Czy jest to uzasadnione stosowanie wyjątków, czy może jest problematyczne?