كلمة محجوزة
في لغات البرمجة ، تُعرف الكلمة المحجوزة (أو المعرّف المحجوز ) بأنها كلمة لا يمكن للمبرمج استخدامها كمعرّف ، مثل اسم متغير أو دالة أو تسمية - فهي "محجوزة للاستخدام". باختصار، يبدأ المعرّف بحرف، متبوعًا بأي سلسلة من الأحرف والأرقام (في بعض اللغات، يُعامل الرمز السفلي "_" كحرف).
في لغات البرمجة الإجرائية ، وفي العديد من لغات البرمجة كائنية التوجه ، تُستخدم الكلمات المفتاحية ، بالإضافة إلى عمليات الإسناد واستدعاءات الدوال الفرعية، لتحديد عبارة معينة ، مثل if و while و do و for ، إلخ. وتُعامل العديد من اللغات الكلمات المفتاحية ككلمات محجوزة، بما في ذلك Ada و C و C++ و COBOL و Java و Pascal . ويختلف عدد الكلمات المحجوزة اختلافًا كبيرًا من لغة إلى أخرى: ففي لغة C حوالي 30 كلمة، بينما في لغة COBOL حوالي 400 كلمة.
لا تحتوي بعض اللغات على أي كلمات محجوزة؛ فـ Fortran و PL/I تحددان الكلمات الرئيسية حسب السياق، بينما تستخدم Algol 60 و Algol 68 بشكل عام stropping لتمييز الكلمات الرئيسية عن المعرفات التي يحددها المبرمج، على سبيل المثال، .ifor 'ifأو 'if'or ifهي كلمة رئيسية تختلف عن المعرف if.
تحتوي معظم لغات البرمجة على مكتبة قياسية (أو مكتبات)، على سبيل المثال الدوال الرياضية sin و cos وما إلى ذلك. الأسماء التي توفرها المكتبة ليست محجوزة، ويمكن للمبرمج إعادة تعريفها إذا لم تكن وظائف المكتبة مطلوبة.
امتياز
عند استخدام بيئة تطوير تفاعلية (IDE) لتطوير برنامج، تقوم هذه البيئة عادةً بتمييز الكلمات المحجوزة بعرضها بلون مختلف. في بعض بيئات التطوير، قد يتم تمييز التعليقات أيضًا (بلون آخر). هذا يُسهّل على المبرمج ملاحظة الاستخدام غير المتوقع للكلمات المحجوزة أو عدم إنهاء التعليق بشكل صحيح.
قد توجد كلمات محجوزة ليست كلمات مفتاحية. على سبيل المثال، في لغة جافا، true تُستخدم falseالكلمات المحجوزة كقيم منطقية. ومثال آخر، في لغة باسكال، divتُستخدم modالكلمات المحجوزة كعوامل (قسمة الأعداد الصحيحة والباقي).
قد توجد أيضًا كلمات محجوزة ليس لها معنى محدد. على سبيل المثال، في لغة جافا، تُدرج الكلمات ` gotoa` و`b` ككلمات محجوزة، ولكنها غير مذكورة في قواعد بناء جملة جافا . [ 1 ]const
تُستخدم كلمات مفتاحية مثل if أو while أثناء تحليل بناء الجملة لتحديد نوع العبارة قيد الدراسة. ويكون هذا التحليل أبسط بكثير إذا كانت الكلمات المفتاحية محجوزة أو مُلغاة. ولنتأمل مدى تعقيد استخدام التحليل السياقي في لغة فورتران 77 للتمييز بين:
إذا كان (B) l1,l2 ! فرع ثنائي الاتجاه، حيث B تعبير منطقي إذا كان (N) l1,l2,l3 ! فرع ثلاثي الاتجاهات، حيث N تعبير عددي إذا (ب) إذن ! ابدأ الكتلة الشرطية إذا (ب) فإن = 3.1 ! التعيين الشرطي للمتغير ثم إذا (ب) س = 10 ! عبارة شرطية واحدة إذا (ب) انتقل إلى l4 ! قفزة شرطية إذا كان (N) = 2 ! قم بتعيين قيمة لمتغير ذي فهرس باسم IF
يمكن أن يسمح نظام PL/I أيضاً ببعض التركيبات التي تبدو مربكة:
إذا كان الشرط يساوي الشرط الأول، فإن الشرط الثاني يساوي الشرط الثانيIF، ثم الشرط الثالث يساوي الشرط الثاني.THEN
المزايا
قد تكون البرامج أكثر قابلية للقراءة مقارنة بلغة برمجة تستخدم تقنية الإيقاف المؤقت.
من الأسهل على بيئة التطوير المتكاملة (IDE) تمييز الكلمات الرئيسية، دون الحاجة إلى إجراء تحليل سياقي لتحديد الكلمات التي تعتبر كلمات رئيسية بالفعل (انظر أمثلة Fortran في القسم السابق).
يمكن أن يكون المترجم أسرع، لأنه يستطيع تحديد ما إذا كانت الكلمة كلمة رئيسية بسرعة، دون الحاجة إلى إجراء تحليل سياقي على كامل عبارة طويلة بشكل تعسفي.
العيوب
قد يصعب على المستخدمين الجدد تعلم لغة برمجة ما بسبب قائمة (قد تكون طويلة) من الكلمات المحجوزة التي يجب حفظها والتي لا يمكن استخدامها كمعرفات. [ 2 ]
قد يكون من الصعب توسيع اللغة لأن إضافة الكلمات المحجوزة للميزات الجديدة قد تبطل البرامج الحالية، أو على العكس من ذلك، فإن "تحميل" الكلمات المحجوزة الحالية بمعاني جديدة يمكن أن يكون مربكًا.
قد يكون نقل البرامج مشكلة لأن الكلمة غير المحجوزة بواسطة نظام أو مترجم واحد قد تكون محجوزة بواسطة نظام أو مترجم آخر.
مزيد من الحجز
إلى جانب حجز قوائم محددة من الكلمات، تحجز بعض اللغات نطاقات كاملة من الكلمات، لاستخدامها كمساحات خاصة لإصدارات اللغة المستقبلية، أو اللهجات المختلفة، أو امتدادات خاصة ببائع المترجم ، أو للاستخدام الداخلي بواسطة المترجم، لا سيما في تشويه الأسماء .
يتم ذلك غالبًا باستخدام بادئة، غالبًا ما تكون شرطة سفلية واحدة أو أكثر . وتُعدّ لغتا C و C++ مثالين بارزين في هذا الصدد: إذ يحجز معيار C99 المعرّفات التي تبدأ بشرطتين سفليتين أو شرطة سفلية متبوعة بحرف كبير، كما يحجز أيضًا المعرّفات التي تبدأ بشرطة سفلية واحدة (في المساحات العادية ومساحات الوسوم) لاستخدامها في نطاق الملف ؛ [ 3 ] ومع معيار C++03 ، يحجز أيضًا المعرّفات التي تحتوي على شرطتين سفليتين في أي مكان [ 4 ] - وهذا يسمح باستخدام شرطتين سفليتين كفاصل (لربط معرّفات المستخدم)، على سبيل المثال.
أدى الاستخدام المتكرر للشرطتين السفليتين في المعرفات الداخلية في بايثون إلى ظهور الاختصار dunder؛ وقد صاغه مارك جاكسون [ 5 ] وبشكل مستقل تيم هوشبيرج [ 6 ] في غضون دقائق من بعضهما البعض، وكلاهما ردًا على نفس السؤال في عام 2002. [ 7 ] [ 8 ]
مواصفة
تُحدد قائمة الكلمات المحجوزة والكلمات المفتاحية في أي لغة برمجة عند تطويرها، ويُشكل كلاهما جزءًا من مواصفاتها الرسمية . يُفضّل عمومًا تقليل عدد الكلمات المحجوزة لتجنب تقييد أسماء المعرّفات الصالحة. كما أن إضافة كلمات محجوزة جديدة قد تُعطّل البرامج الحالية التي تستخدم تلك الكلمات (لأنها غير متوافقة مع الإصدارات السابقة)، لذا يُتجنب ذلك. ولمنع هذا التعطيل وتوفير التوافق مع الإصدارات اللاحقة ، تُحجز بعض الكلمات دون استخدامها حاليًا (كلمة محجوزة ليست كلمة مفتاحية)، مما يسمح باستخدامها مستقبلًا دون تعطيل البرامج الحالية. بدلاً من ذلك، يمكن تطبيق ميزات اللغة الجديدة كتعريفات مُسبقة، والتي يُمكن تجاوزها، وبالتالي لا تُعطّل البرامج الحالية.
تشمل أسباب المرونة السماح لمطوري المترجمات بتوسيع المواصفات بإضافة ميزات غير قياسية، أو السماح للغات القياسية المختلفة بتوسيعها، أو السماح للإصدارات المستقبلية من اللغة بإضافة ميزات إضافية. على سبيل المثال، قد تتوقع لغة إجرائية إضافة إمكانيات البرمجة الكائنية في إصدار مستقبلي أو في إحدى لهجاتها، وعندها يمكن إضافة كلمات مفتاحية مثل `____` classأو `____ object`. ولمراعاة هذا الاحتمال، قد تجعل المواصفات الحالية هذه الكلمات محجوزة، حتى وإن لم تكن مستخدمة حاليًا.
من الأمثلة البارزة على ذلك لغة جافا ، حيث تُعتبر الكلمتان ` consta` و` gotob` كلمتين محجوزتين - ليس لهما أي معنى في جافا، ولا يمكن استخدامهما كمعرفات. وبحجز هاتين الكلمتين، يمكن تضمينهما في الإصدارات المستقبلية من جافا، إذا لزم الأمر، دون التأثير على شفرة المصدر القديمة . على سبيل المثال، في عام 1999، طُرح اقتراح لإضافة خاصية مشابهة للغة C++ constإلى اللغة، وكان ذلك ممكنًا باستخدام constالكلمة `a`، نظرًا لكونها محجوزة ولكنها غير مستخدمة حاليًا؛ إلا أن هذا الاقتراح رُفض - لا سيما لأنه على الرغم من أن إضافة هذه الخاصية لن تُؤثر على أي برامج موجودة، إلا أن استخدامها في المكتبة القياسية (خاصة في المجموعات) سيؤدي إلى فقدان التوافق. [ 9 ] تحتوي جافا سكريبت أيضًا على عدد من الكلمات المحجوزة التي لا تؤدي وظائف خاصة؛ وتختلف القائمة الدقيقة باختلاف الإصدار والوضع. [ 10 ]
تختلف لغات البرمجة اختلافًا كبيرًا في وتيرة إدخالها للكلمات المحجوزة أو الكلمات المفتاحية الجديدة، وفي كيفية تسميتها. فبعض اللغات شديدة التحفظ، إذ نادرًا ما تُدخل كلمات مفتاحية جديدة، أو لا تُدخلها أبدًا، لتجنب تعطيل البرامج القائمة. بينما تُدخل لغات أخرى كلمات مفتاحية جديدة بحرية أكبر، مما يُلزم البرامج القائمة بتغيير المعرّفات الموجودة التي تتعارض معها. وتُقدّم دراسة حالة مقارنة بين الكلمات المفتاحية الجديدة في لغة C11 ولغة C++11 ، وكلاهما من عام 2011. تجدر الإشارة إلى أنه في لغتي C وC++، تُعتبر المعرّفات التي تبدأ بشرطة سفلية متبوعة بحرف كبير محجوزة: [ 11 ]
تُفضّل لجنة لغة C عدم إنشاء كلمات مفتاحية جديدة في نطاق أسماء المستخدمين، إذ يُتوقع عمومًا أن تتجنب كل مراجعة للغة C تعطيل برامج C القديمة. في المقابل، تُفضّل لجنة لغة C++ (WG21) جعل الكلمات المفتاحية الجديدة تبدو طبيعية مثل الكلمات القديمة. على سبيل المثال، تُعرّف C++11
thread_localكلمة مفتاحية جديدة لتحديد مساحة تخزين ثابتة محلية لخيط واحد. تُعرّف C11 الكلمة المفتاحية الجديدة على النحو التالي:_Thread_local.في ملف رأس C11 الجديد < threads.h > ، يوجد تعريف ماكرو لتوفير الاسم ذي المظهر الطبيعي: [ 12 ]
#define thread_local _Thread_local
أي أن C11 قدمت الكلمة الرئيسية _Thread_localضمن مجموعة موجودة من الكلمات المحجوزة (تلك التي لها بادئة معينة)، ثم استخدمت مرفقًا منفصلاً (معالجة الماكرو) للسماح باستخدامها كما لو كانت كلمة رئيسية جديدة بدون أي بادئة، بينما قدمت C++11 الكلمة الرئيسية thread_localعلى الرغم من أنها ليست كلمة محجوزة موجودة، مما أدى إلى تعطيل أي برامج استخدمتها، ولكن دون الحاجة إلى معالجة الماكرو.
الكلمات المحفوظة واستقلال اللغة
تسمح مواصفات البنية التحتية للغة المشتركة (CLI) الخاصة بـ .NET من مايكروسوفت بدمج التعليمات البرمجية المكتوبة بأكثر من 40 لغة برمجة مختلفة في منتج نهائي. ونتيجةً لذلك، قد تحدث تعارضات في المعرفات/الكلمات المحجوزة عندما تحاول التعليمات البرمجية المكتوبة بلغة ما تنفيذ تعليمات برمجية مكتوبة بلغة أخرى. على سبيل المثال، قد تحتوي مكتبة Visual Basic (.NET) على تعريف فئة مثل:
تعريف فئة This في Visual Basic.NET:Public Class this ' هذه الفئة تقوم بشيء ما... End Classإذا تم تجميع هذا الكود وتوزيعه كجزء من حزمة أدوات، فسيواجه مبرمج C# الذي يرغب في تعريف متغير من النوع " " مشكلة: كلمة " " محجوزة في C#. وبالتالي، لن يتم تجميع الكود التالي في C#:this'this'
// استخدام هذه الفئة في لغة C#:this x = new this (); // لن يتم تجميع الكود!وتنشأ مشكلة مماثلة عند الوصول إلى الأعضاء، وتجاوز الأساليب الافتراضية ، وتحديد مساحات الأسماء.
يتم حل هذه المشكلة عن طريق الإيقاف المؤقت . ولتجاوز هذه المشكلة، تسمح المواصفات بوضع علامة @ (في لغة C#) قبل المعرف، مما يجبر المترجم على اعتباره معرفًا وليس كلمة محجوزة.
// استخدام هذه الفئة في لغة C#:@this x = new @this (); // سيتم تجميعها!ولضمان الاتساق، يُسمح بهذا الاستخدام أيضًا في الإعدادات غير العامة مثل المتغيرات المحلية وأسماء المعلمات والأعضاء الخاصين.
انظر أيضاً
مراجع
- ↑ "كلمات مفتاحية للغة جافا" . شركة أوراكل .
- ↑ سيبستا، روبرت و. (2012). مفاهيم لغات البرمجة (ملف PDF) ( الطبعة العاشرة). أديسون-ويسلي. الصفحات 206-207 . ISBN 978-0-13-139531-2.
- ↑ مواصفات C99، 7.1.3 المعرفات المحجوزة
- ↑ مواصفات C++03، 17.4.3.2.1 الأسماء العامة [lib.global.names]
- ↑ جاكسون، مارك (26 سبتمبر 2002). "كيف تنطق "__" (شرطتان سفليتان)؟" . قائمة بريدية خاصة بمبرمجي بايثون . تم الاطلاع عليه في 9 نوفمبر 2014 .
- ↑ هوشبرغ، تيم (26 سبتمبر 2002). "كيف تنطق "__" (شرطتان سفليتان)؟" . قائمة بريدية خاصة بمبرمجي بايثون . تم الاطلاع عليه في 9 نوفمبر 2014 .
- ↑ "DunderAlias - Python Wiki" . wiki.python.org .
- ↑ نوتز، بات (26 سبتمبر 2002). "كيف تنطق "__" (شرطتان سفليتان)؟" . قائمة بريدية خاصة بمبرمجي بايثون . تم الاطلاع عليه في 9 نوفمبر 2014 .
- ↑ "معرف الخطأ: JDK-4211070، يجب أن تدعم لغة جافا المعاملات الثابتة (مثل لغة C++) لصيانة الكود [ sic ] " . Bugs.sun.com . تم الاطلاع عليه بتاريخ 2014-11-04 .
- ↑ "القواعد المعجمية - جافا سكريبت | MDN" . developer.mozilla.org . 8 نوفمبر 2023.
- ↑ مواصفات C99، 7.1.3 المعرفات المحجوزة: "جميع المعرفات التي تبدأ بشرطة سفلية وحرف كبير أو شرطة سفلية أخرى محجوزة دائمًا لأي استخدام."
- ↑ C11: معيار C الجديد ، توماس بلام، "ملاحظة حول الكلمات المفتاحية"
- بنى البرمجة
- مواضيع لغات البرمجة
