ฉันใช้ข้อยกเว้นเพื่อตรวจสอบปัญหาก่อน ตัวอย่างเช่น:
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;
}
โปรแกรมของฉันไม่ควรผ่านnull
ในฟังก์ชั่นนี้ ฉันไม่เคยตั้งใจที่จะ อย่างไรก็ตามในขณะที่เราทุกคนรู้ว่าสิ่งที่ไม่ได้ตั้งใจเกิดขึ้นในการเขียนโปรแกรม
การโยนข้อยกเว้นหากปัญหานี้เกิดขึ้นช่วยให้ฉันสามารถตรวจสอบและแก้ไขได้ก่อนที่จะทำให้เกิดปัญหามากขึ้นในที่อื่น ๆ ในโปรแกรม ข้อยกเว้นหยุดโปรแกรมและบอกฉันว่า "มีสิ่งไม่ดีเกิดขึ้นที่นี่แก้ไขได้" แทนที่จะเป็นการnull
เคลื่อนไหวรอบ ๆ โปรแกรมทำให้เกิดปัญหาที่อื่น
ตอนนี้คุณพูดถูกในกรณีนี้มันอาจnull
จะทำให้เกิดNullPointerException
ในทันทีดังนั้นมันอาจไม่ใช่ตัวอย่างที่ดีที่สุด
แต่ให้พิจารณาวิธีการเช่นนี้ตัวอย่างเช่น:
public void registerPerson(Person person){
persons.add(person);
notifyRegisterObservers(person); // sends the person object to all kinds of objects.
}
ในกรณีนี้ a null
ตามพารามิเตอร์จะถูกส่งไปรอบ ๆ โปรแกรมและอาจทำให้เกิดข้อผิดพลาดได้ในภายหลังซึ่งยากที่จะติดตามกลับไปที่จุดเริ่มต้น
เปลี่ยนฟังก์ชั่นดังนี้:
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.
}
ทำให้ฉันเห็นปัญหามากก่อนที่จะทำให้เกิดข้อผิดพลาดแปลก ๆ ในที่อื่น ๆ
นอกจากนี้การnull
อ้างอิงเป็นพารามิเตอร์เป็นเพียงตัวอย่างเท่านั้น อาจเป็นปัญหาหลายประเภทจากการขัดแย้งที่ไม่ถูกต้องกับสิ่งอื่น มันจะดีกว่าเสมอที่จะพบพวกเขา แต่เนิ่นๆ
ดังนั้นคำถามของฉันคือ: เป็นวิธีปฏิบัติที่ดีหรือไม่ การใช้ข้อยกเว้นเป็นเครื่องมือป้องกันปัญหาดีหรือไม่? นี่เป็นแอปพลิเคชันที่ถูกต้องตามกฎหมายของข้อยกเว้นหรือมีปัญหาหรือไม่