قاعدة التسلل

تصف قاعدة التسلل بنية لغة برمجة الحاسوب التي تحدد حدود كتلة التعليمات البرمجية عبر المسافة البادئة . [ 1 ] [ 2 ]

وقد صاغ هذا المصطلح بيتر لاندين ، ربما كتلاعب بالألفاظ على قانون التسلل في كرة القدم .

يتم التباين بين لغة قواعد التسلل ولغة الشكل الحر التي لا يكون للمسافة البادئة فيها أي معنى نحوي، وتكون المسافة البادئة مسألة أسلوبية بحتة .

كما يوصف أسلوب قواعد التسلل بأنه يحتوي على مسافة بادئة كبيرة .

تعريف

عرّف بيتر لاندين ، في مقالته التي نشرها عام 1966 بعنوان " لغات البرمجة الـ 700 التالية "، قاعدة التجاوز على النحو التالي: "يُعتبر أي رمز غير مسافة بيضاء على يسار أول رمز من هذا القبيل في السطر السابق بداية لإعلان جديد." [ 3 ]

مثال

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

def is_even ( a : int ) -> bool :"""حدد ما إذا كان الرقم فرديًا أم زوجيًا."""إذا كان a % 2 == 0 :print ( "حتى!" )إرجاع صحيحاطبع ( "غريب!" )إرجاع خطأ

يبدأ جسم الدالة في السطر الثاني لأنه مُزاح بمقدار مستوى واحد (أربع مسافات) أكثر من السطر السابق. ifويبدأ جسم العبارة في السطر الرابع لأنه مُزاح بمقدار مستوى إضافي، وينتهي في السطر الخامس لأن السطر السادس مُزاح بمقدار مستوى أقل، أي أنه مُزاح للخارج.

تُعدّ النقطتان الرأسيتان ( :) في نهاية سطر عبارة التحكم جزءًا من قواعد لغة بايثون، وليستا من قواعد التجاوز. ويمكن تطبيق القاعدة بدون استخدام النقطتين الرأسيتين.

تطبيق

يمكن تطبيق قاعدة التجاوز في مرحلة التحليل المعجمي ، كما هو الحال في لغة بايثون ، حيث يؤدي زيادة المسافة البادئة إلى إخراج المحلل المعجمي INDENTرمزًا، بينما يؤدي تقليلها إلى إخراج DEDENTرمز آخر. [ 4 ] تتوافق هذه الرموز مع القوس المفتوح {والقوس المغلق }في اللغات التي تستخدم الأقواس للدلالة على الكتل، مما يعني أن قواعد العبارة لا تعتمد على استخدام الأقواس أو المسافة البادئة. يتطلب هذا أن يحتفظ المحلل المعجمي بحالة، أي مستوى المسافة البادئة الحالي، وبالتالي يمكنه رصد أي تغييرات في المسافة البادئة عند حدوثها، ولذا فإن القواعد المعجمية ليست مستقلة عن السياق ، INDENTبل DEDENTتعتمد على المعلومات السياقية لمستوى المسافة البادئة السابق.

البدائل

البديل الأساسي لفصل الكتل البرمجية بالمسافة البادئة، والذي شاع استخدامه بفضل انتشار لغة C وتأثيرها الواسع ، هو تجاهل المسافات البيضاء وتحديد الكتل صراحةً باستخدام الأقواس المعقوفة (مثلًا، {و }) أو أي فاصل آخر. مع أن هذا يتيح مزيدًا من حرية التنسيق - إذ قد يختار المطور عدم إضافة مسافة بادئة لأجزاء صغيرة من التعليمات البرمجية مثل عبارات break و continue - إلا أن التعليمات البرمجية ذات المسافات البادئة غير الدقيقة قد تضلل القارئ، كما في حالة خطأ goto fail .

لا تُميّز لغة ليسب وغيرها من اللغات القائمة على تعابير S بين العبارات والتعابير، وتكفي الأقواس للتحكم في نطاق جميع العبارات داخل اللغة. وكما هو الحال في لغات الأقواس المعقوفة، يتجاهل القارئ (أي دالة القراءة) المسافات البيضاء في الغالب. تُستخدم المسافات البيضاء لفصل الرموز. [ 5 ] يسمح الهيكل الواضح لرمز ليسب بالمسافة البادئة التلقائية، لتوفير إشارة بصرية للقارئ البشري.

ثمة بديل آخر يتمثل في أن تبدأ كل كتلة برمجية وتنتهي بكلمات مفتاحية صريحة. على سبيل المثال، في لغة ALGOL 60 ولغتها المشتقة باسكال ، تبدأ الكتل البرمجية بالكلمة المفتاحيةbegin وتنتهي بالكلمة المفتاحية end. في بعض اللغات (وليس باسكال)، يعني هذا أن أسطرًا جديدة مهمة (على عكس لغات الأقواس المعقوفة)، لكن المسافة البادئة ليست كذلك. في لغتي BASIC و Fortran ، تبدأ الكتل البرمجية باسم الكتلة (مثل ) وتنتهي باسم الكتلة مسبوقًا بـ (مثل ). في Fortran ، يمكن لكل كتلة برمجية أن تحمل اسمًا فريدًا خاصًا بها، مما يضيف مستوى آخر من الوضوح إلى التعليمات البرمجية الطويلة. تتشابه لغة ALGOL 68 و Bourne shell (sh و bash ) في هذا، لكن نهاية الكتلة تُحدد عادةً باسم الكتلة مكتوبًا بالعكس (مثلًا، تبدأ عبارة switch وتمتد حتى العبارة المطابقة ؛ وبالمثل، العبارات الشرطية ... ...[ ...[ ...]IFENDEND IFcaseesacifthenelifelse] fiأو حلقات forfor ... do... odفي ALGOL68 أو for... do... doneفي bash).

يوجد شكلٌ مثيرٌ للاهتمام من هذا في لغة Modula-2 ، وهي لغةٌ شبيهةٌ بلغة باسكال، حيثُ تتخلص من الفرق بين الكتل ذات السطر الواحد والكتل متعددة الأسطر. يسمح هذا بتجاوز مُفتاح الكتلة ( {أو ) لجميع الكتل باستثناء كتلة مستوى الدالة، مما يتطلب فقط رمز إنهاء الكتلة ( أو ). كما أنه يُصلح مشكلة else المُعلقة . من المُعتاد وضع الرمز على نفس مستوى المسافة البادئة لبقية الكتلة، مما يُعطي بنية كتلة سهلة القراءة.BEGIN}ENDend

إحدى مزايا استخدام لغة فورتران هي تحسين قابلية قراءة التعليمات البرمجية الطويلة أو المتداخلة أو المعقدة. فمجموعة من المسافات البادئة أو الأقواس المغلقة وحدها لا توفر أي مؤشرات سياقية حول الكتل التي يتم إغلاقها، مما يستلزم الرجوع إلى الوراء والتدقيق بشكل أكبر أثناء تصحيح الأخطاء . علاوة على ذلك، فإن اللغات التي تسمح باستخدام لاحقة للكلمات المفتاحية الشبيهة بـ END تُحسّن هذه المؤشرات، مثل استخدام ` continueend` بدلاً من `end` continue for x، وعلامة نهاية الحلقة التي تحدد متغير الفهرسNEXT I بدلاً من `end` NEXT، والحلقات ذات الأسماء الفريدةCYCLE X1 بدلاً من `end`. مع ذلك، غالبًا ما توفر محررات التعليمات البرمجيةCYCLE الحديثة مؤشرات مرئية، مثل تمييز بناء الجملة ، وميزات مثل طي التعليمات البرمجية للمساعدة في التغلب على هذه العيوب.

إنتاجية

في لغة البرمجة سكالا ، كانت الإصدارات الأولى تسمح باستخدام الأقواس المعقوفة فقط. أضافت سكالا 3 خيار استخدام المسافة البادئة لتنظيم الكتل البرمجية. صرّح المصمم مارتن أوديرسكي بأن هذه كانت أهم ميزة ساهمت بها سكالا 3 في تحسين إنتاجيته، إذ أنها تُقلل حجم البرامج بنسبة تزيد عن 10% وتُبقي المبرمجين منغمسين في العمل، وينصح باستخدامها. [ 6 ]

لغات البرمجة البارزة

لغات برمجة بارزة تطبق قاعدة التسلل:

تنسيقات ملفات أخرى

تنسيقات ملفات نصية بارزة غير متعلقة بالبرمجة، تتميز بمسافة بادئة كبيرة:

انظر أيضاً

مراجع

  1. هاتون، ج. (6 ديسمبر 2012). "التحليل باستخدام المُركِّبات" . في: ديفيس، كي؛ هيوز، جون (محرران). البرمجة الوظيفية: وقائع ورشة عمل غلاسكو 1989، 21-23 أغسطس 1989، فريزربرغ، اسكتلندا . سبرينغر ساينس آند بيزنس ميديا. ص 362-364 . ISBN  9781447131663تم الاطلاع عليه بتاريخ 3 سبتمبر 2015 .
  2. تيرنر، د.أ. (13 أغسطس 2013). "نبذة تاريخية عن لغات البرمجة الوظيفية (محاضرة مدعوة)" . في: لويدل، هانز وولفغانغ؛ بينيا، ريكاردو (محرران). اتجاهات في البرمجة الوظيفية: الندوة الدولية الثالثة عشرة، TFP 2012، سانت أندروز، المملكة المتحدة، 12-14 يونيو 2012، أوراق مختارة منقحة . سبرينغر. ص 8. ISBN  9783642404474تم الاطلاع عليه بتاريخ 3 سبتمبر 2015 .
  3. لاندين، بي جيه (مارس 1966). "لغات البرمجة الـ 700 التالية" (ملف PDF) . مجلة اتصالات رابطة مكائن ​​الحوسبة . 9 (3): 157-166 . doi : 10.1145/365230.365257 . S2CID 13409665. مؤرشف من الأصل (ملف PDF) في 20 يونيو 2010. تم الاطلاع عليه في 28 أغسطس 2015 . 
  4. توثيق بايثون ، 2. التحليل المعجمي : 2.1.8. المسافة البادئة
  5. "CLHS: القسم 2.1.4.7" .
  6. أوديرسكي، مارتن (17 يونيو 2020). مارتن أوديرسكي: تحديث سكالا 3 (فيديو). يوتيوب. يبدأ الحدث من الدقيقة 36:35 إلى 45:08. مؤرشف من الأصل في 21 ديسمبر 2021. تم الاطلاع عليه في 25 أبريل 2021 .
  7. سايم، دون (20 مايو 2009). "ملاحظات الإصدار التفصيلية لتحديث F# لشهر مايو 2009 CTP وإصدارات Visual Studio 2010 Beta1" . مؤرشف من الأصل في 21 يناير 2019.
  8. تقرير هاسكل – التصميم
  9. لوبستر، لغة برمجة ذات كتابة ثابتة وإدارة ذاكرة في وقت الترجمة لتطوير الألعاب/الرسومات
  10. مون سكريبت، وهي لغة تُترجم إلى لغة لوا
  11. دليل لغة MoonScript 0.5.0
  12. "أوامر GCode الوصفية" .
  13. مواصفات ترميز النص المعاد هيكلته – المسافة البادئة