إعلان (برمجة حاسوبية)

في برمجة الكمبيوتر ، الإعلان هو بنية لغوية تحدد خصائص المعرف : فهو يعلن معنى الكلمة (المعرف). [1] تُستخدم الإعلانات بشكل شائع للوظائف والمتغيرات والثوابت والفئات ، ولكن يمكن استخدامها أيضًا للكيانات الأخرى مثل التعدادات وتعريفات النوع. [1] بخلاف الاسم (المعرف نفسه) ونوع الكيان (الدالة والمتغير وما إلى ذلك)، تحدد الإعلانات عادةً نوع البيانات ( للمتغيرات والثوابت )، أو توقيع النوع (للوظائف)؛ قد تتضمن الأنواع أيضًا أبعادًا، مثل المصفوفات . يُستخدم الإعلان للإعلان عن وجود الكيان للمترجم ؛ وهذا مهم في تلك اللغات ذات النوع القوي التي تتطلب تحديد الوظائف والمتغيرات والثوابت وأنواعها بإعلان قبل الاستخدام، ويُستخدم في الإعلان الأمامي . [2] غالبًا ما يُقارن مصطلح "الإعلان" بمصطلح "التعريف"، [1] لكن المعنى والاستخدام يختلفان بشكل كبير بين اللغات؛ انظر أدناه.

تبرز الإعلانات بشكل خاص في اللغات التي تنتمي إلى تقليد ALGOL ، بما في ذلك عائلة BCPL ، وأبرزها C و C++ ، وأيضًا Pascal . تستخدم Java مصطلح "إعلان"، على الرغم من أن Java لا تتطلب إعلانات وتعريفات منفصلة.

الإعلان مقابل التعريف

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

في الاستخدام غير الرسمي، يشير "الإعلان" فقط إلى إعلان نقي (أنواع فقط، بدون قيمة أو نص)، بينما يشير "التعريف" إلى إعلان يتضمن قيمة أو نص. ومع ذلك، في الاستخدام الرسمي (في مواصفات اللغة)، يشمل "الإعلان" كلا المعنيين، مع تمييزات أدق حسب اللغة: في C وC++، يُطلق على إعلان الوظيفة التي لا تتضمن نصًا اسم نموذج أولي للوظيفة ، بينما يُطلق على إعلان الوظيفة التي تتضمن نصًا اسم "تعريف الوظيفة". في Java، تحدث الإعلانات في شكلين. بالنسبة للطرق العامة، يمكن تقديمها في واجهات كتوقيعات للطريقة، والتي تتكون من أسماء الطرق وأنواع الإدخال ونوع الإخراج. يمكن استخدام تدوين مماثل في تعريف الطرق المجردة ، والتي لا تحتوي على تعريف. يمكن إنشاء مثيل للفئة المحيطة، بدلاً من ذلك، يلزم إنشاء فئة مشتقة جديدة، والتي توفر تعريف الطريقة، لإنشاء مثيل للفئة . بدءًا من Java 8 ، تم تضمين تعبير lambda في اللغة، والذي يمكن اعتباره بمثابة إعلان وظيفة.

التصريحات والتعريفات

في عائلة C من لغات البرمجة، غالبًا ما يتم تجميع الإعلانات في ملفات رأسية ، والتي يتم تضمينها في ملفات مصدر أخرى تشير إلى هذه الإعلانات وتستخدمها، ولكنها لا تتمتع بالوصول إلى التعريف. توفر المعلومات الموجودة في ملف الرأس الواجهة بين الكود الذي يستخدم الإعلان والكود الذي يحدده، وهو شكل من أشكال إخفاء المعلومات . غالبًا ما يتم استخدام الإعلان للوصول إلى الوظائف أو المتغيرات المحددة في ملفات مصدر مختلفة، أو في مكتبة . يؤدي عدم التطابق بين نوع التعريف ونوع الإعلان إلى حدوث خطأ في المترجم.

بالنسبة للمتغيرات، تقوم التعريفات بتعيين قيم لمنطقة من الذاكرة تم حجزها أثناء مرحلة الإعلان. بالنسبة للوظائف، توفر التعريفات نص الوظيفة. وبينما يمكن إعلان متغير أو وظيفة عدة مرات، يتم تعريفها عادةً مرة واحدة (في C++ ، يُعرف هذا باسم قاعدة التعريف الواحدة أو ODR).

تسمح اللغات الديناميكية مثل JavaScript أو Python بشكل عام بإعادة تعريف الوظائف، أي إعادة ربطها ؛ حيث تكون الوظيفة متغيرًا مثل أي متغير آخر، ولها اسم وقيمة (التعريف).

فيما يلي بعض الأمثلة على الإعلانات التي ليست تعريفات، في لغة C:

extern char example1 ؛ extern int example2 ؛ void example3 ( void   
  
 

فيما يلي بعض الأمثلة على الإعلانات التي تعد تعريفات، مرة أخرى في C:

char example1 ; /* خارج تعريف الدالة سيتم تهيئته إلى الصفر. */ int example2 = 5 ; void example3 ( void ) { /* التعريف بين الأقواس */ }  
   
    

متغيرات غير محددة

في بعض لغات البرمجة، يتم توفير إعلان ضمني في المرة الأولى التي يتم فيها مواجهة مثل هذا المتغير في وقت التجميع . في لغات أخرى، يعتبر مثل هذا الاستخدام خطأً، مما قد يؤدي إلى رسالة تشخيصية. بدأت بعض اللغات بسلوك الإعلان الضمني، ولكن مع نضجها، قدمت خيارًا لتعطيله (على سبيل المثال " " في Perluse strict أو " " في Visual BasicOption Explicit ).

انظر أيضا

ملحوظات

  1. ^ على سبيل المثال، تستخدم Java "الإعلان" (إعلان الفئة، إعلان الطريقة)، بينما تستخدم Python "التعريف" (تعريف الفئة، تعريف الوظيفة). [3]
  2. ^ لوحظ هذا التمييز في "وحدات" باسكال (الوحدات النمطية)، وفي تنظيم الكود التقليدي في C وC++، والذي يحتوي على ملفات رأس تتكون إلى حد كبير من إعلانات نقية، وملفات مصدر تتكون من تعريفات، على الرغم من أن هذا لا يتم مراعاته بدقة دائمًا، ولا يتم فرضه بواسطة اللغة.

مراجع

  1. ^ abcd "يحدد الإعلان تفسير وسمات مجموعة من المعرفات. تعريف المعرف هو إعلان لهذا المعرف الذي:
    • بالنسبة لكائن [متغير أو ثابت]، يتسبب في حجز مساحة تخزين لهذا الكائن؛
    • بالنسبة للوظيفة، تتضمن نص الوظيفة؛
    • بالنسبة لثابت التعداد، هو الإعلان (الوحيد) للمعرف؛
    • بالنسبة لاسم typedef، هو الإعلان الأول (أو الوحيد) للمعرف.
    المواصفة C11، 6.7: الإعلانات، الفقرة 5.
  2. ^ مايك باناهان. "2.5. إعلان المتغيرات". GBdirect . تم الاسترجاع في 2011-06-08 . [أ] الإعلان [...] يقدم فقط اسم ونوع شيء ما ولكنه لا يخصص أي مساحة تخزين[...].
  3. ^ 7. العبارات المركبة، مرجع لغة بايثون
  • إعلان مقابل تعريف في C وC++، أليكس ألين
  • 8.2. الإعلانات والتعريفات وإمكانية الوصول، كتاب C، GBdirect
  • الإعلانات والتعريفات (C++)، MSDN
    "تخبر الإعلانات المترجم بوجود عنصر برنامج أو اسم. تحدد التعريفات الكود أو البيانات التي يصفها الاسم."
تم الاسترجاع من "https://en.wikipedia.org/w/index.php?title=إعلان_(برمجة_الحاسوب)&oldid=1242507682"
Original text
Rate this translation
Your feedback will be used to help improve Google Translate