السحر (البرمجة)
في سياق برمجة الحاسوب ، يُستخدم مصطلح "السحر" بشكل غير رسمي للدلالة على التجريد ؛ ويُستخدم لوصف الشيفرة التي تُعالج مهامًا معقدة مع إخفاء هذا التعقيد لتقديم واجهة بسيطة. يحمل هذا المصطلح دلالات ساخرة نوعًا ما ، وغالبًا ما يُوحي بأن السلوك الحقيقي للشيفرة ليس واضحًا للعيان. على سبيل المثال، غالبًا ما تُوصف آليات الكتابة متعددة الأشكال والإغلاق في لغة بيرل بأنها "سحر".
يشير المصطلح إلى أن التعقيد الخفي قابل للفهم من حيث المبدأ على الأقل، على عكس المصطلحات الأخرى التي تصف تقنيات غامضة مخفية عمدًا أو يصعب فهمها للغاية. ومع ذلك، يمكن استخدام المصطلح أيضًا بشكل لطيف، مما يوحي بوجود "سحر" في الشفرة.
يوصف عمل هذه التجريدات بأنه يتم " بشكل سحري تلقائي "، وهو مزيج من كلمتي "تلقائيًا" و "سحريًا".
عتامة مرجعية
يشير مصطلح "السحر" إلى الإجراءات التي تُجري حسابات بناءً على بيانات غير مُقدمة لها بشكل واضح، وذلك بالوصول إلى وحدات أخرى أو مواقع ذاكرة أو متغيرات عامة لا يُفترض بها الوصول إليها (بمعنى آخر، أنها غير شفافة مرجعيًا). وفقًا لأحدث نماذج هندسة البرمجيات ، حتى عند استخدام البرمجة الهيكلية ، يُفضل عادةً أن تتصرف كل دالة بنفس الطريقة في كل مرة تُمرر إليها نفس الوسائط، مُتبعةً بذلك أحد المبادئ الأساسية للبرمجة الوظيفية . عندما تُخالف دالة ما هذه القاعدة، يُقال غالبًا إنها تحتوي على "سحر".
مثال مبسط على السحر السلبي هو الكود التالي في لغة PHP :
دالة سحرية () { متغير عام $somevariable ;echo $somevariable ; }$somevariable = true ;سحر ();على الرغم من وضوح الكود أعلاه، إلا أنه يصعب في كثير من الأحيان فهم مصدر magic()قيمة الدالة عند استخدامه في مشروع كبير. لذا، يُفضّل كتابة هذا الكود باستخدام المفهوم التالي:
function noMagic ( $myvariable ) { echo $myvariable ; }$somevariable = true ;noMagic ( $somevariable );عدم التعامد
قد تكون أي قيمة عددية سحرية ، أي أنها تحتوي على ميزات خاصة لا تمتلكها القيمة العددية العادية.
يمكن توسيع تعريف " السحر" أو "الخاص" ليشمل نوع بيانات ، أو جزء من التعليمات البرمجية، أو كلمة مفتاحية، أو عنوان جهاز، يمتلك خصائص لا تشترك فيها كائنات أخرى متطابقة. وقد تكون هذه الخصائص السحرية موثقة أو غير موثقة.
- في لغة ISO C ، لا يمكن نسخ مؤشرات الملفات (من النوع
FILE) بأمان لأن عناوينها [ 2 ] قد تكون غير قابلة للتغيير. بمعنى آخر، قد يضع بيئة التشغيل مؤشرات الملفات الأصلية في نطاق عناوين ثابت ، ولا توفر سلوك مؤشر الملف لنسخة أنشأها المستخدم في عنوان آخر. ونتيجة لذلك، تقبل إجراءات المكتبة القياسية مؤشرات إلى مؤشرات الملفات، من النوعFILE *، بدلاً من ذلك. - في لغة بيرل 5، تُسند العبارة ضمنيًا السطر المقروء من الملف بواسطة <file_handle> إلى المتغير ، وتُطبق الدالة على التعبير بحيث تُقيّم أي سلسلة نصية مقروءة بنجاح، حتى السلسلة الفارغة، على أنها صحيحة وتُكمل الحلقة . لا يحدث هذا مع <file_handle> في أي مكان آخر ، أو مع أي تعبير تحكم آخر. [ 3 ]
while(<file_handle>)$_defined()"0"while()while() - في برنامج المحاكاة ، وخاصةً برنامج المحاكاة قيد التطوير، قد تكون نقاط استدعاء النظام الخاصة بالجهاز المحاكى سحرية؛ فعند استدعائها، قد يقوم برنامج المحاكاة بتشغيل التعليمات البرمجية الأصلية من أجل الراحة أو السرعة أو الوصول إلى الأجهزة المادية، وإعداد وحدة المعالجة المركزية والذاكرة المحاكية كما لو كان قد نفذ التعليمات البرمجية الأصلية.
- على سبيل المثال، يتعامل
CALLبيان BBC BASIC V مع عناوين استدعاء النظام في Acorn MOS بطريقة غير مباشرة؛ فبدلاً من محاولة الانتقال إلى كود ARM عند تلك العناوين، يُطلق مقاطعة برمجية في RISC OS تُعادل استدعاء النظام. [ 4 ] والنتيجة هي محاكاة Acorn MOS بشكل كافٍ لتشغيل برامج BASIC ذات 8 بت التي لا تحتوي على لغة التجميع دون تعديل.
- على سبيل المثال، يتعامل
- في لغة BBC BASIC أيضاً، لا يقتصر دور المتغير الرقمي
@%على التحكم في تنسيق الطباعة فحسب، بل يقبل أيضاً التعيين المباشر لسلاسل تنسيق ANSI printf ، وهو ما يُعد عادةً خطأً في عدم تطابق الأنواع. [ 4 ] - في لغة جافا سكريبت ، ينجح تقييم المعامل
typeofعندما يكون المعامل معرفًا غير معلن، وهو ما ينتج عنه عادةً خطأReferenceError. - أي تعليق يؤثر على الكود هو بمثابة سحر.
- تُعد عناوين الإدخال/الإخراج المُرتبطة بالذاكرة والمتغيرات المتقلبة بمثابة سحر في هذا السياق، على الرغم من أن هذا المصطلح لا يُستخدم عادةً.
انظر أيضاً
مراجع
- ↑ "perlguts – perldoc.perl.org" . 5 أكتوبر 2014. تم الاطلاع عليه بتاريخ 18 فبراير 2015 .
- ↑ باناهان، مايك؛ برادي، ديكلان؛ دوران، مارك (1991). "9.10.3 ملف الرأس". كتاب لغة C: عرض معيار ANSI C. مجموعة التعليمات ( الطبعة الثانية). ووكينغهام، إنجلترا: دار نشر أديسون-ويسلي. ص 234. ISBN
stdio.h0-201-54433-4ليس من الآمن نسخ هذه الكائنات داخل البرنامج ؛ففي بعض الأحيان قد تكون عناوينها "سحرية".
- ↑ "perlop – perldoc.perl.org" . 7 سبتمبر 2010. تم الاطلاع عليه في 17 فبراير 2011 .
- 1 2 "27. الكلمات المفتاحية" (ملف PDF) . دليل مرجعي للغة بي بي سي بيسك ( الطبعة الأولى). كامبريدج، إنجلترا: شركة أكورن للكمبيوتر. أكتوبر 1992. الصفحات 229، 349. ISBN 1-85250-103-0تم الاطلاع عليه بتاريخ 9 مايو 2007 .
- حكايات شعبية عن برمجة الحاسوب
- حكايات شعبية في هندسة البرمجيات
