โดยรวมแล้วการใช้ลอง / จับที่มากเลิกใช้เนื่องจาก catch block มีราคาแพงมากจากจุดของทรัพยากร ลอง / การใช้งานจับทำให้ผมนึกถึงการบริหารความเสี่ยง การบริหารความเสี่ยงมีสองมิติ:
- ความน่าจะเป็นของความเสี่ยงที่เกิดขึ้น
- ความเสียหายที่มันสามารถมีได้
ตอนนี้ถ้าคุณออกไปจากบ้านเปียโนล้มลงบนหัวของคุณที่ไหนสักแห่งในขณะที่ไม่เป็นเช่นนั้นที่จะเกิดขึ้น (อาจ 0.001%) แต่สามารถฆ่าคุณ
การจัดการข้อยกเว้นเป็นเช่นนั้น ลองบล็อกไม่แพง แต่ catch block นั้นมีราคาแพงมากเพราะมันต้องการสร้าง table of stack trace และทำสิ่งอื่น ๆ ดังนั้นในการตัดสินใจเกี่ยวกับ try / catch blocks คุณควรพิจารณาจำนวนครั้งที่คุณอาจกด catch block หากในจำนวน 10,000 ประเพณีคุณทำได้เพียงครั้งเดียวแล้วใช้งาน แต่ถ้าเป็นแบบฟอร์มและผู้ใช้อาจไม่ได้กรอกข้อมูลถูกต้อง 50% ครั้งคุณควรหลีกเลี่ยงการวางบล็อกลองใช้ / การกระทำที่นั่น
ในสถานที่ที่มีความน่าจะเป็นของการเกิดข้อยกเว้นสูงแนะนำให้ใช้if {} else {}
บล็อกเพื่อหลีกเลี่ยงการเกิดข้อยกเว้น ตัวอย่างเช่นที่คุณต้องการหารสองตัวเลขแทนการเขียน:
try
{
int result = a/b;
}
catch (DivisionByZeroException ex)
{
// Showing a message here, and logging of course.
}
คุณควรเขียน:
if (b == 0)
{
int result = a/b;
}
else
{
// Showing a message to user to change the value of b, etc.
}