انتقل إلى المحتوى

رقم سحري

من ويكيبيديا، الموسوعة الحرة

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

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

الأهمية

[عدل]

تلعب الأرقام السحرية دورًا هامًا في النصوص البرمجية، إذ يُخفي استخدام الأرقام السحرية غير المُسماة نية المطورين في اختيار هذا الرقم،[2] كما يزيد من فرص حدوث أخطاء دقيقة، ويُصعّب تعديل البرنامج وتوسيعه في المستقبل.[3] فعلى سبيل المثال، يصعُب معرفة ما إذا كان كل رقم في العدد 3.14159265358979323846 مكتوبًا بشكل صحيح، أو ما إذا كان من الممكن اختصار الثابت إلى 3.14159 دون التأثير على وظائف البرنامج بسبب دقته المنخفضة. إن استبدال جميع الأرقام السحرية المهمة بثوابت مُسمّاة (تُسمى أيضًا المتغيرات التوضيحية) يُسهّل قراءة البرامج وفهمها وصيانتها.[4] كذلك يمكن أن تُؤدي الأسماء المُختارة لتكون ذات معنى في سياق البرنامج إلى ترميز يسهل على مُطوّرها فهمها، حتى لو لم يكن المؤلف الأصلي (أو حتى المؤلف الأصلي بعد مرور فترة زمنية). ومن الأمثلة على الثوابت المُسمّاة بطريقة غير مُفيدة int SIXTEEN = 16 ، بينما قد يقدم int NUMBER_OF_BITS = 16 is mo وصفًا أكثر وضوحًا.

لا تقتصر المشاكل المُرتبطة بـالأرقام السحرية المذكورة هنا على الأنواع العددية، بل يُطبّق هذا المصطلح أيضًا على أنواع بيانات أخرى حيث يكون استخدام ثابت مُسمّى أكثر مرونةً ووضوحًا.[1] وبالتالي، فإن استخدام const string testUserName = "John" يكون أفضل من الظهور المتكرر للرقم السحري ' "John"في مجموعة الاختبار.

الأمثلة

[عدل]

في المثال التالي، والذي يحسب السعر بعد الضريبة، يُعد الرقم 1.05 رقمًا سحريًا:

price_tax = 1.05 * price

يمكن تحسين المثال السابق بإضافة متغير مُسمّى وصفيًا:

TAX = 0.05
price_tax = (1.0 + TAX) * price

مراجع

[عدل]
  1. ^ ا ب Martin، Robert C. (2009). "Chapter 17: Smells and Heuristics - G25 Replace Magic Numbers with Named Constants". Clean Code - A handbook of agile software craftsmanship. Boston: Prentice Hall. ص. 300. ISBN:978-0-13-235088-4.
  2. ^ Martin، Robert C. (2009). "Chapter 17: Smells and Heuristics - G16 Obscured Intent". Clean Code - A handbook of agile software craftsmanship. Boston: Prentice Hall. ص. 295. ISBN:978-0-13-235088-4.
  3. ^ Maguire، James (9 ديسمبر 2008). "Bjarne Stroustrup on Educating Software Developers". Datamation.com. مؤرشف من الأصل في 2018-06-23.
  4. ^ Vogel، Jeff (29 مايو 2007). "Six ways to write more comprehensible code". IBM Developer. مؤرشف من الأصل في 2018-09-26.