ConstructiCat Logo
CodeBust.
Browse section ▾

استبدال الرقم السحري بثابت رمزي.

Problem

يستخدم الكود الخاص بك رقمًا له معنى معين.

Solution

استبدل هذا الرقم بثابت له اسم مقروء ومفهوم يوضح معنى الرقم.

##Example

Before
double potentialEnergy(double mass, double height) {
  return mass * height * 9.81;
}
After
static final double GRAVITATIONAL_CONSTANT = 9.81;

double potentialEnergy(double mass, double height) {
  return mass * height * GRAVITATIONAL_CONSTANT;
}

##Why Refactor

الرقم السحري (magic number) هو قيمة عددية تظهر في الكود المصدري ولكن ليس لها معنى واضح. هذا "النمط المضاد" (anti-pattern) يجعل من الصعب فهم البرنامج وإعادة هيكلة الكود.

وتنشأ المزيد من الصعوبات عندما تحتاج إلى تغيير هذا الرقم السحري. لن تنجح عملية البحث والاستبدال في هذا الأمر: حيث قد يُستخدم نفس الرقم لأغراض مختلفة في أماكن مختلفة، مما يعني أنه سيتعين عليك التحقق من كل سطر كود يستخدم هذا الرقم.

##Benefits

  • يمكن أن يعمل الثابت الرمزي كتوثيق حي لمعنى قيمته.

  • تعديل قيمة الثابت أسهل بكثير من البحث عن هذا الرقم في كامل قاعدة الكود (codebase)، دون المخاطرة بتغيير نفس الرقم المستخدم في مكان آخر لغرض مختلف بالخطأ.

  • تقليل التكرار في استخدام الرقم أو السلسلة النصية في الكود. هذا مهم بشكل خاص عندما تكون القيمة معقدة وطويلة (مثل 3.14159 أو 0xCAFEBABE).

##How to Refactor

  1. قم بالتصريح عن ثابت وتعيين قيمة الرقم السحري له.

  2. ابحث عن جميع مواضع ذكر الرقم السحري.

  3. لكل رقم تجده، تحقق جيدًا من أن الرقم السحري في هذه الحالة المحددة يتوافق مع الغرض من الثابت. إذا كان الأمر كذلك، فاستبدل الرقم بالثابت الخاص بك. هذه خطوة مهمة، لأن نفس الرقم قد يعني أشياء مختلفة تمامًا (ويتم استبداله بثوابت مختلفة، حسب الحالة).