استبدال الرقم السحري بثابت رمزي.
يستخدم الكود الخاص بك رقمًا له معنى معين.
استبدل هذا الرقم بثابت له اسم مقروء ومفهوم يوضح معنى الرقم.
##Example
double potentialEnergy(double mass, double height) {
return mass * height * 9.81;
}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
-
قم بالتصريح عن ثابت وتعيين قيمة الرقم السحري له.
-
ابحث عن جميع مواضع ذكر الرقم السحري.
-
لكل رقم تجده، تحقق جيدًا من أن الرقم السحري في هذه الحالة المحددة يتوافق مع الغرض من الثابت. إذا كان الأمر كذلك، فاستبدل الرقم بالثابت الخاص بك. هذه خطوة مهمة، لأن نفس الرقم قد يعني أشياء مختلفة تمامًا (ويتم استبداله بثوابت مختلفة، حسب الحالة).