نبذةٌ بسيطة:
الـunions فى الـC و الـ++C هى مكوناتٌ الفكرة الرئيسة من ورائها هي إتاحة الفرصة لاستخدام نفس الحيز من الذاكرة بأكثر من متغيرٍ لها أكثر من نوعٍ مختلف، يعنى أن الدامج عبارةٌ عن حاويةٍ تُشبه الصنف class من حيث أنه يتم داخله تعريف متغيراتٍ مُكونةٍ له، و لكنه يختلف عنه فى أن الصنف يعتبر كل متغيرٍ مُعَرَّفٍ منفصلاً عن المتغيرات الأخرى من حيث حيز الذاكرة المحجوز له و لها، بينما فى الدامج يتم إعطاء كل تلك المتغيرات مساحةً مشتركةً فى الذاكرة تبدأ من نفس النقطة و تنتهى حسب مساحة ذلك المتغير (و التى تتأثر بنوعه).
يعنى لو أننا كتبنا ما يلى:
فإن معنى هذا أننا نُعَرِّفُ متغيراً يسمى var1 من النوع DATATYPE يمكننا التعامل معه على أساس أنه من النوعchar أو النوع int أو النوع long أو النوع float أو النوع double، فى حين أن القيمة التى نتعامل بها كل مرةٍ هى نفس القيمة و لكن مع اختلاف المساحة التى نتعامل بها منها.
و لمزيدٍ من التوضيح يمكنكم مراجعة هذا الرابط في موسوعة الويكيبيديا:
http://en.wikipedia.org/wiki/Union_%28computer_science%29
لا ينبغي أن يُسمح بها في اللغات الجديدة للأسباب التالية:
إن الأسباب التى يسوقها الشارحون للبرمجة بلغتى الـC و الـ++C فى كتبهم لوجود الدامجات و مدى فائدتها لا تُسمن و لا تُغْنِى من جوعٍ أمام التحقيق و التدقيق لتغير الزمن و اختلاف الظروف؛ فما وجدت منها غير التالي:
أن الدامجات تُوفر فى استخدام الذاكرة حينما أريد التعامل مع قيمةٍ ما بأكثر من أسلوب؛ فبدلاً من إشهار متغيراتٍ مختلفة الأنواع بشكلٍ منفصلٍ و أقوم كل مرةٍ (حينما أحتاج إلى التعامل مع القيمة على أنها من نوعٍ معينٍ) بوضعها فى المتغير الذى ينتمى إلى ذلك النوع، و من ثم أقوم بإجراء العمليات على ذلك المتغير، بدلاً من كل هذا فإننى أقوم مباشرةً بوضع تعريفٍ لدامجٍ يدمج بين تلك الأنواع فى مكانٍ واحدٍ؛ لأتمكن من التعامل مع القيمة المُخَزَّنة فى داخله بأى شكلٍ أريده.
و هذا السبب ضعيفٌ جداً فى هذه الأيام؛ فهذا القول كان صحيحاً حينما كانت الأجهزة التى تتم البرمجة لها لا تحتوى من الذاكرة إلا على 64 كيلو بايت: يستغل نظام التشغيل مقداراً صغيراً منها و تستغل البرامج العادية الباقى، و هذه هى مواصفات أجهزة الـPDP11 التى كانت أوائل برامج الـC مكتوبةً لها ! و لكننا الآن نعيش فى زمنٍ مختلفٍ ليس من الممكن فيه أن تُوهمنى أنك حينما تكتب برنامجاً كالسابق سوف تُوفر لى الكثير من الذاكرة المهدرة ! بل العكس أنك ستحصل على برنامجٍ غريبٍ سئ التكوين مقابل الحصول على بضعة بايتاتٍ لا تساوى أى شئٍ بالمقارنة مع أقل الإمكانيات فى سعات ذواكر الحاسوب الموجودة اليوم !
إذاً فهذه الفائدة التى كانت موجودةً للدامجات قد انتهت إلى غير رجعة، و كان من المحتم على مصممى لغات البرمجة التنبه إلى هذا و إبعاد ذلك المكون الزائد عن اللغات الجديدة، لا ضمه إليها كما حدث مع الـ++Cالتى سارعت إلى ضمه إليها و كأنه كنزٌ ثمين ! و ذلك على الرغم من أنها قد صُمِّمَت بعد فترةٍ كبيرةٍ من ظهور الـC و حينما لم يكن القلق على إهدار ذاكرة الحاسوب كما كان أيام الأجهزة العتيقة فى الأزمان الغابرة لتصنيع الحواسيب !
الدامجات أكثر كفاءةً من استدعاء الإجراءات التى تُحَوِّل بين أنواع المتغيرات. أى أنه بدلاً من استدعاء إجراءات التحويل بين أنواع المتغيرات فى كل مرةٍ نحتاج فيها إلى تحويل قيمةٍ ما من نوعٍ إلى نوعٍ آخر فإننا نستخدم المتغيرات الموجودة فى الدامج مباشرة، و نستخدم منها ذلك الذى له النوع الذى نرغب فى التعامل مع القيمة على أساسه.
و هذا قولٌ آخرٌ ضَعُفَ بتغير الزمن، حيث أن مثل هذه التوفيرات الغريبة لا تُقدم تلك النتائج الخارقة التى تُغرى ببذل الجهد و التضحية للحصول عليها؛ فما الذى سيضر البرنامج إذا ما استدعى إجراء تحويلٍ عشر مراتٍ أو أكثر ؟! و ما التأخير الذى سيحدث عندئذٍ و كيف سيؤثر ذلك التأخير على زمن تنفيذ البرنامج بصورةٍ و لو طفيفة ؟!