القيمة (علوم الحاسوب)
في علوم الحاسوب وبرمجة البرمجيات ، القيمة هي تمثيل لكيان ما يمكن للبرنامج التلاعب به. أعضاء النوع هي قيم ذلك النوع. [ 1 ]
تُحدد "قيمة المتغير" من خلال الربط المقابل في البيئة . [ 2 ] في اللغات التي تحتوي على متغيرات قابلة للتخصيص ، يصبح من الضروري التمييز بين القيمة اليمنى (أو المحتوى) والقيمة اليسرى (أو الموقع) للمتغير. [ 3 ]
في لغات البرمجة التصريحية (عالية المستوى)، يجب أن تكون القيم شفافة مرجعياً . وهذا يعني أن القيمة الناتجة مستقلة عن موقع التعبير اللازم لحسابها. فقط محتوى الموقع (البتات، سواء كانت 1 أو 0) وتفسيرها هما المهمان.
فئة القيمة
على الرغم من اسمها، تُستخدم هذه المصطلحات في معايير لغة C++ لتصنيف التعبيرات، وليس القيم. [ 4 ] : 8.2.1
الواجب: قيم l وقيم r
تستخدم بعض لغات البرمجة مفهومي القيم اليسرى واليمنى ، المستمدين من طريقة التقييم المعتادة على جانبي عبارة الإسناد. تشير القيمة اليسرى إلى كائن يبقى موجودًا بعد انتهاء التعبير المستخدم. أما القيمة اليمنى فهي قيمة مؤقتة لا تبقى موجودة بعد انتهاء التعبير الذي يستخدمها. [ 5 ]
تم تقديم مفهومي القيم اليسرى واليمنى بواسطة لغة البرمجة المدمجة (CPL). وتُشابه مفاهيم القيمة اليمنى والقيمة اليسرى والقيمة اليمنى/القيمة اليسرى في التعبير أنماط المعاملات التالية : معامل الإدخال (له قيمة)، ومعامل الإخراج (يمكن تعيين قيمة له)، ومعامل الإدخال/الإخراج (له قيمة ويمكن تعيين قيمة له)، على الرغم من اختلاف التفاصيل التقنية بين السياقات واللغات.
قيم R والعناوين
في العديد من لغات البرمجة، وخاصةً عائلة C ، تمتلك القيم من النوع l عناوين تخزين يمكن للبرنامج قيد التشغيل الوصول إليها برمجيًا (على سبيل المثال، عبر عامل عنوان مثل &C/C++)، مما يعني أنها متغيرات أو مراجع غير مُشار إليها لموقع ذاكرة مُحدد. يمكن أن تكون القيم من النوع R قيمًا من النوع l (انظر أدناه) أو قيمًا غير l - وهو مصطلح يُستخدم فقط للتمييز بينها وبين قيم l. لنأخذ التعبير C التالي كمثال 4 + 9. عند تنفيذه، يُولّد الحاسوب قيمة عددية صحيحة تساوي 13، ولكن نظرًا لأن البرنامج لم يُحدد صراحةً مكان تخزين هذه القيمة 13 في الحاسوب، فإن التعبير يُعتبر قيمة غير l. من ناحية أخرى، إذا أعلن برنامج C عن متغير xوأسند إليه القيمة 13 x، فإن التعبير xسيحمل القيمة 13 ويُعتبر قيمة l.
في لغة C، كان مصطلح l-value يعني في الأصل شيئًا يمكن إسناده (ومن هنا جاء الاسم، مما يشير إلى أنه يقع على الجانب الأيسر من عامل الإسناد)، ولكن منذ constإضافة الكلمة المحجوزة (constant) إلى اللغة، أصبح المصطلح الآن "قيمة l-value قابلة للتعديل". في C++11، يوجد رمز دلالي خاص &&(لا ينبغي الخلط بينه وبين &&العامل المستخدم للعمليات المنطقية)، للدلالة على استخدام/الوصول إلى عنوان التعبير للمترجم فقط ؛ أي أنه لا يمكن استرداد العنوان باستخدام &عامل address-of أثناء وقت تشغيل البرنامج (انظر استخدام دلالات النقل ). أدت إضافة دلالات النقل إلى تعقيد تصنيف القيم بإضافة مفهوم x-value (القيمة المنتهية الصلاحية) الذي يشير إلى كائن يقترب من نهاية دورة حياته ويمكن إعادة استخدام موارده (عادةً عن طريق نقلها). وقد أدى ذلك أيضاً إلى إنشاء فئتي gl-value (القيمة المعممة l) وهي قيم l و x، و pr-values (القيم r النقية) وهي قيم r ليست قيم x. [ 6 ]
يمكن تطبيق هذا النوع من المراجع على جميع القيم المرجعية، بما في ذلك القيم غير المُعرَّفة في السجل (غير l) والقيم المُعرَّفة في السجل (l). توفر بعض المعالجات تعليمة واحدة أو أكثر تأخذ قيمة فورية ، ويُشار إليها اختصارًا بـ "imm". تُخزَّن القيمة الفورية كجزء من التعليمة التي تستخدمها، وعادةً ما تُستخدم لتحميل قيمة في سجل، أو إضافتها إليه، أو طرحها منه. أما الأجزاء الأخرى من التعليمة فهي رمز العملية (opcode ) والوجهة (destination). قد تكون الوجهة ضمنية. (قد توجد القيمة غير الفورية في سجل، أو تُخزَّن في مكان آخر في الذاكرة، مما يتطلب أن تحتوي التعليمة على عنوان مباشر أو غير مباشر [مثل عنوان سجل الفهرس] لهذه القيمة).
يشير تعبير القيمة l إلى كائن. يمكن الوصول إلى تعبير القيمة l غير القابل للتعديل، ولكن لا يمكن تعيين قيمته. أما تعبير القيمة l القابل للتعديل فيتيح تغيير الكائن المُشار إليه وفحصه. القيمة r هي أي تعبير، والقيمة غير l هي أي تعبير ليس قيمة l. ومن الأمثلة على ذلك "القيمة المباشرة" (انظر أعلاه)، وبالتالي فهي غير قابلة للوصول.
في لغة التجميع
يمكن أن تكون القيمة أي نوع من البيانات تقريبًا من خلال نوع بيانات معين ، على سبيل المثال سلسلة نصية أو رقم أو حرف واحد.
تدعم المعالجات عادةً أكثر من حجم واحد للبيانات الفورية، مثل 8 أو 16 بت، باستخدام رمز عملية فريد ورمز تذكيري لكل نوع من التعليمات. إذا أدخل المبرمج قيمة بيانات لا تتناسب مع النطاق، يُصدر المُجمِّع رسالة خطأ "خارج النطاق". تسمح معظم المُجمِّعات بالتعبير عن القيمة الفورية كبيانات ASCII أو عشرية أو سداسية عشرية أو ثمانية أو ثنائية . وبالتالي، فإن حرف ASCII 'A'هو نفسه الحرف 0 65أو 0x411. قد يختلف ترتيب البايتات في السلاسل النصية بين المعالجات، اعتمادًا على المُجمِّع وبنية الحاسوب.
انظر أيضاً
ملحوظات
- ↑ ميتشل 1996 ، ص 9.
- ↑ أهو، ألفريد ف.؛ لام، مونيكا س.؛ سيثي، رافي؛ أولمان، جيفري د. (1986). المترجمات: المبادئ والتقنيات والأدوات . شركة أديسون-ويسلي للنشر. ISBN 0-201-10088-6.
- ↑ ميتشل 1996 ، ص 389-390.
- ↑ "ISO/IEC 14882:2017 لغات البرمجة - C++" . 2017.
- ↑ "القيم اليسرى والقيم اليمنى (فيجوال سي++)" . شبكة مطوري مايكروسوفت . تم الاطلاع عليه في 3 سبتمبر 2016 .
- ↑ ويليام م. ميلر. "تصنيف فئات قيمة التعبير" (PDF) .
مراجع
- ميتشل، جون سي. (1996). أسس لغات البرمجة . مطبعة معهد ماساتشوستس للتكنولوجيا. ISBN 0-262-13321-0.
- ستراشي، كريستوفر (2000). "المفاهيم الأساسية في لغات البرمجة". الحوسبة الرمزية والحسابات من الرتبة العليا . 13 : 11-49 . doi : 10.1023/A:1010000313106 . S2CID 14124601 .
روابط خارجية
- بيانات الحاسوب
- مفاهيم لغة البرمجة
- نظرية الأنواع
