استبدال الاستثناء باختبار شرطي.
تقوم برمي استثناء في مكان يمكن لاختبار بسيط فيه القيام بالمهمة؟
استبدل الاستثناء باختبار شرطي.
##مثال
double getValueForPeriod(int periodNumber) {
try {
return values[periodNumber];
} catch (ArrayIndexOutOfBoundsException e) {
return 0;
}
}double getValueForPeriod(int periodNumber) {
if (periodNumber < 0 || periodNumber >= values.length) {
return 0;
}
return values[periodNumber];
}##لماذا نعيد الهيكلة
يجب استخدام الاستثناءات لمعالجة السلوك غير المنتظم المرتبط بخطأ غير متوقع. ولا ينبغي أن تعمل كبديل للاختبار. إذا كان من الممكن تجنب الاستثناء ببساطة عن طريق التحقق من الشرط قبل التشغيل، فافعل ذلك. يجب حجز الاستثناءات للأخطاء الحقيقية.
على سبيل المثال، دخلت حقل ألغام وقمت بتفجير لغم هناك، مما أدى إلى حدوث استثناء؛ تم التعامل مع الاستثناء بنجاح وتم نقلك جواً إلى بر الأمان خارج حقل الألغام. ولكن كان بإمكانك تجنب كل هذا ببساطة عن طريق قراءة لافتة التحذير الموجودة أمام حقل الألغام في المقام الأول.
##الفوائد
- يمكن أن تكون الجملة الشرطية البسيطة في بعض الأحيان أكثر وضوحًا من كود معالجة الاستثناءات.
##كيفية إعادة الهيكلة
-
أنشئ جملة شرطية للحالة الاستثنائية وانقلها قبل كتلة try/catch.
-
انقل الكود من قسم
catchإلى داخل هذه الجملة الشرطية. -
في قسم
catch، ضع الكود الخاص برمي استثناء عادي غير مسمى وقم بتشغيل جميع الاختبارات. -
إذا لم يتم رمي أي استثناءات أثناء الاختبارات، فتخلص من عامل
try/catch.