استبدال رمز الخطأ باستثناء.
دالة تعيد قيمة خاصة تشير إلى وجود خطأ؟
قم برمي استثناء (exception) بدلاً من ذلك.
##Example
int withdraw(int amount) {
if (amount > _balance) {
return -1;
}
else {
balance -= amount;
return 0;
}
}void withdraw(int amount) throws BalanceException {
if (amount > _balance) {
throw new BalanceException();
}
balance -= amount;
}##Why Refactor
إرجاع رموز الأخطاء هو بقايا عفا عليها الزمن من البرمجة الإجرائية. في البرمجة الحديثة، يتم تنفيذ معالجة الأخطاء بواسطة فئات خاصة تسمى الاستثناءات. إذا حدثت مشكلة، فإنك "ترمي" خطأً، ثم يتم "التقاطه" بواسطة أحد معالجات الاستثناءات. ويتم تنشيط كود خاص بمعالجة الأخطاء، والذي يتم تجاهله في الظروف العادية، للاستجابة لها.
##Benefits
-
يخلص الكود من عدد كبير من الجمل الشرطية للتحقق من رموز الأخطاء المختلفة. معالجات الاستثناءات (Exception handlers) هي طريقة أكثر إيجازًا للتمييز بين مسارات التنفيذ العادية وغير العادية.
-
يمكن لفئات الاستثناءات تنفيذ دوالها الخاصة، وبالتالي تحتوي على جزء من وظائف معالجة الأخطاء (مثل إرسال رسائل الخطأ).
-
على عكس الاستثناءات، لا يمكن استخدام رموز الأخطاء في الباني (constructor)، لأن الباني يجب أن يعيد فقط كائنًا جديدًا.
##How to Refactor
حاول إجراء خطوات إعادة الهيكلة هذه لرمز خطأ واحد فقط في كل مرة. سيسهل ذلك إبقاء جميع المعلومات الهامة في ذهنك وتجنب الأخطاء.
-
ابحث عن جميع الاستدعاءات لدالة تعيد رموز أخطاء، وبدلاً من التحقق من رمز الخطأ، قم بتغليفها بكتل
try/catch. -
داخل الدالة، بدلاً من إرجاع رمز الخطأ، ارمِ استثناءً.
-
قم بتغيير توقيع الدالة بحيث يحتوي على معلومات حول الاستثناء الذي يتم رميه (قسم
@throws).