Tôi sử dụng ngoại lệ để bắt vấn đề sớm. Ví dụ:
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;
}
Chương trình của tôi không bao giờ nên vượt qua null
trong chức năng này. Tôi không bao giờ có ý định đó. Tuy nhiên như chúng ta đều biết, những thứ vô tình xảy ra trong lập trình.
Ném một ngoại lệ nếu sự cố này xảy ra, cho phép tôi phát hiện và khắc phục nó, trước khi nó gây ra nhiều vấn đề hơn ở những nơi khác trong chương trình. Ngoại lệ dừng chương trình và nói với tôi "những thứ xấu đã xảy ra ở đây, hãy sửa nó". Thay vì điều này null
di chuyển xung quanh chương trình gây ra vấn đề ở nơi khác.
Bây giờ, bạn đã đúng, trong trường hợp null
này đơn giản sẽ gây ra một NullPointerException
quyền ngay lập tức, vì vậy nó có thể không phải là ví dụ tốt nhất.
Nhưng hãy xem xét một phương pháp như phương pháp này chẳng hạn:
public void registerPerson(Person person){
persons.add(person);
notifyRegisterObservers(person); // sends the person object to all kinds of objects.
}
Trong trường hợp này, một null
tham số sẽ được truyền xung quanh chương trình và có thể gây ra lỗi nhiều sau đó, điều này sẽ khó theo dõi lại nguồn gốc của chúng.
Thay đổi chức năng như vậy:
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.
}
Cho phép tôi phát hiện ra vấn đề nhiều trước khi nó gây ra lỗi lạ ở những nơi khác.
Ngoài ra, một null
tham chiếu như một tham số chỉ là một ví dụ. Nó có thể là nhiều loại vấn đề, từ các đối số không hợp lệ đến bất cứ điều gì khác. Luôn luôn tốt hơn để phát hiện ra chúng sớm.
Vì vậy, câu hỏi của tôi chỉ đơn giản là: đây có phải là thực hành tốt? Việc sử dụng ngoại lệ của tôi là công cụ ngăn chặn sự cố có tốt không? Đây có phải là một ứng dụng hợp pháp của các trường hợp ngoại lệ hay nó có vấn đề?