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