نوع الفراغ
في العديد من لغات البرمجة ، وخاصةً لغات البرمجة ذات الأقواس المعقوفة المشتقة من لغة C ولغة ALGOL 68 ، يُعرف نوع البيانات void بأنه نوع القيمة المُعادة من دالة تُعيد قيمةً بشكل طبيعي، ولكنها لا تُقدّم أي قيمة مُخرَجة إلى مُستدعيها. عادةً ما تُستدعى هذه الدوال لتأثيراتها الجانبية ، مثل تنفيذ مهمة ما أو الكتابة إلى مُدخلاتها. يُشابه استخدام نوع البيانات void في هذا السياق الإجراءات في لغة باسكال والبنى النحوية التي تُعرّف الإجراءات الفرعية في لغة فيجوال بيسك . كما أنه يُشبه نوع البيانات unit المُستخدم في لغات البرمجة الوظيفية ونظرية الأنواع. انظر قسم "نوع البيانات unit#في لغات البرمجة" للمقارنة.
تدعم لغتا C و C++ أيضًا مؤشر void (أو مؤشر إلى نوع void )، ويُرمز له بـ ` void` void*، لكن هذا مفهوم مختلف. المتغيرات من هذا النوع هي مؤشرات إلى بيانات من نوع غير محدد ، لذا في هذا السياق (وليس في السياقات الأخرى) void*يعمل المؤشر `void` تقريبًا كمؤشر عام أو مؤشر من أي نوع ؛ فهو لا "يشير" حرفيًا إلى قيمة voidفي الذاكرة. يمكن للبرنامج تحويل مؤشر إلى أي نوع من البيانات (باستثناء مؤشر الدالة ) إلى مؤشر إلى void ثم إعادته إلى النوع الأصلي دون فقدان أي معلومات، مما يجعل هذه المؤشرات مفيدة للدوال متعددة الأشكال. لا يضمن معيار لغة C أن تكون أنواع المؤشرات المختلفة بنفس الحجم أو المحاذاة.
في لغتي C و C++
تنتهي الدالة ذات voidنوع النتيجة إما بالوصول إلى نهاية الدالة أو بتنفيذ عبارة إرجاع بدون قيمة مُرجعة. voidقد يحل هذا النوع أيضًا محل قائمة وسائط نموذج الدالة للإشارة إلى أن الدالة لا تأخذ أي وسائط. تجدر الإشارة إلى أنه في جميع هذه الحالات، voidلا يُعدّ مُحدِّدًا لنوع أي قيمة. على الرغم من الاسم، فإن هذا النوع يُشابه دلاليًا نوع الوحدة الضمني ، وليس النوع الصفري أو النوع الأدنى (والذي يُطلق عليه أحيانًا، بشكل مُربك، "النوع الفارغ"). على عكس نوع الوحدة الحقيقي الذي يُمثل كائنًا أحاديًا، يفتقر النوع الفارغ إلى طريقة لتمثيل قيمته، ولا تُوفر اللغة أي طريقة لتعريف كائن أو تمثيل قيمة بهذا النوع void.
في لغات أخرى مشتقة من لغة C، مثل جافا وسي شارب ، voidيوجد استخدام مشابه. بينما لا تحتوي جافا على مؤشرات صريحة، فإن سي شارب تحتوي عليها void*داخل unsafeالكتل.
في الإصدارات الأولى من لغة C، كانت الدوال التي لا تُرجع قيمة محددة تُرجع قيمة intفارغة افتراضيًا، بينما كانت الدوال التي لا تحتوي على وسائط تُرجع قوائم وسائط فارغة. وكانت المؤشرات إلى البيانات غير المُحددة النوع تُعلن كأعداد صحيحة أو مؤشرات إلى بيانات غير مُحددة النوع char. بعض مُترجمات لغة C القديمة كانت تحتوي على ميزة، تُعتبر الآن مزعجة، وهي توليد تحذير عند استدعاء أي دالة لا تستخدم القيمة المُرجعة منها. في بعض الأحيان، كان الكود القديم يُحوّل استدعاءات الدوال هذه إلى نوع void لإخفاء هذا التحذير. وبحلول الوقت الذي بدأ فيه بيارن ستروستروب العمل على لغة C++ في الفترة 1979-1980، كانت هذه الدوال جزءًا من لهجة لغة C التي تدعمها مُترجمات مُشتقة من AT&T. [ 1 ]voidvoid*
كان للاستخدام الصريح لـ voidمقابل عدم إعطاء أي وسائط في نموذج الدالة دلالات مختلفة في لغتي C و C++، كما هو مفصل في هذا الجدول: [ 2 ]
| ج | المكافئ في لغة C++ |
|---|---|
voidf(void);voidf()(مسموح به منذ القرن 23) | voidf();(مفضل) (مسموح به للتوافق مع الإصدارات السابقة من لغة C) voidf(void); |
voidf();(حتى C23، يقبل عددًا ثابتًا ولكن غير معروف من الوسائط) | template<typename...Ts>voidf(Ts...ts){}(ليست متطابقة تماماً) |
void f()تم إيقاف استخدام صيغة C لتعريف دالة (غير متغيرة المعاملات) بعدد غير محدد من المعاملات، كما في المثال أعلاه، في C99 . [ 3 ] في C23 (وC++)، يُعرّف نموذج الدالة بأقواس فارغة دالة بدون معاملات. [ 4 ] [ 5 ]
في لغتي C و C++، يمكن كتابة "void cast" للإشارة صراحةً إلى تجاهل قيمة ما. [ 6 ]
void f ([[ maybe_unused ]] int a , int b ) { ( void ) a ; return b ; }في لغة هاسكل
على عكس لغة C++، في لغة البرمجة الوظيفية Haskell ، يُشير النوع void إلى النوع الفارغ ، الذي لا يحتوي على أي عناصر. [ 7 ] لا تُرجع الدالة التي تُنفذ ضمن النوع void أي نتائج، IO Voidولا يتوقف البرنامج ذو التأثيرات الجانبية الذي يحمل توقيع النوع، أو قد يتعطل. وبالتحديد، لا توجد دوال كاملة تُنفذ ضمن النوع void.
في البرمجة الوظيفية، سيحل نوع الوحدة محل استخدام نوع void في لغة C. هذا النوع له نتيجة فريدة لا تقدم أي معلومات جديدة.
في الصدأ
يوجد في واجهة الدوال الخارجية في لغة Rust نوع مكافئ لنوع C/C++ . لا يوجد نوع أصلي في Rust، لأنها تستخدم نوع الوحدة .std::ffi::c_voidvoidvoid()
انظر أيضاً
مراجع
- ↑ ريتشي، دينيس م. (1993). "تطوير لغة سي" . جمعية آلات الحوسبة، Inc. مؤرشف من الأصل في 20 فبراير 1998 - عن طريق المؤلف وشركة لوسنت تكنولوجيز 1996.
- ↑ ستروستروب، بيارن (2009). البرمجة: المبادئ والتطبيق باستخدام لغة C++ . بوسطن: أديسون-ويسلي. ص 996. ISBN 978-0-321-54372-1.
- ↑ بيارن ستروستروب، لغتا C و C++: دراسات حالة في التوافق. اختلافات قابلة للتوفيق؟ القرار لك ، دكتور دوبس ، 1 سبتمبر 2002؛ نسخة مطبوعة
- ↑ "WG14-N2432: اقتراح إزالة دعم تعريفات الدوال باستخدام قوائم المعرفات" (ملف PDF) . open-std.org . 25 سبتمبر 2019. مؤرشف (ملف PDF) من الأصل في 27 ديسمبر 2022.
- ↑ "WG14-N2841: لا يُسمح بتعريف الدوال بدون نماذج أولية" . open-std.org . 10-10-2021. مؤرشف من الأصل في 12 نوفمبر 2022.
- ↑ "أنماط لغة C و C++ - CS 61" . cs61.seas.harvard.edu . سبتمبر 2025.
- ↑ "void" . Hackage . تم الاسترجاع في 14 يوليو 2025 .
- أنواع البيانات
- نظرية الأنواع
- محتوى غير معروف
