C++النوع enum
- مفهوم النوع enum
- طريقة تعريف enum
- مفاهيم مهمة حول النوع enum
مفهوم النوع enum
النوع enum يستخدم لتعريف قائمة من القيم أو عدة مجموعة قيم ثابتة بشكل منطقي.
في نهاية الأمر تعتبر هذه المجموعة كنوع جديد من البيانات و فيه عدة قيم محتملة يمكن الإختيار منها فقط.
النوع enum مفيد جداً في حال أردت بناء كود مخصص فقط للتعامل مع نوع محدد من القيم و في حال حاول أي مبرمج آخر عدم الإلتزام بنوع البيانات الذي فرضته أنت و قام بتمرير قيم من نوع آخر فإنه يتم تنبيهه مباشرةً قبل تشغيل الكود و في حال أصر على ذلك و قام بتشغيل الكود فإن مترجم لغة C++ سيمنعه وقت التشغيل و يظهر له خطأ.
بشكل عام, في حال أردت تعريف مجموعة قيم مترابطة يستحيل أن تتبدل فالخيار الأمثل هو تعريف هذه القيم في الأساس بداخل enum.
أمثلة حول بعض المعلومات الثابتة في الحياة و التي أيضاً تعتبر ثابتة في المنطق هي:
- فصول السنة ( الخريف, الشتاء, الربيع, الصيف )
- الإتجاهات ( الشمال - الجنوب - الشرق - الغرب )
- أيام الأسبوع ( الإثنين - الثلاثاء - الأربعاء إلخ.. )
- أشهر السنة ( كانون الثاني - شباط - آذار إلخ.. )
- الجنس ( ذكر - أنثى )
عند التعامل مع هذا النوع الثابت من البيانات و الذي لا نريد لأحد أن يعبث به فإننا نستخدم النوع enum و هذا ما سنراه لاحقاً في الأمثلة.
طريقة تعريف enum
تعريف enum يشبه كثيراً طريقة تعريف struct و لكن التعامل مع المتغيرات التي نضعها فيه لاحقاً هو ما يختلف.
عند وضع متغيرات بداخله يمكنك إعطاؤهم قيم بنفسك أو ترك المترجم يعطيهم قيم إفتراضية بنفسه.
إفتراضياً المتغيرات التي تضعها يتم إعطاؤها قيم بالترتيب إبتداءاً من صفر, فمثلاً أولاً أول متغير تكون قيمته 0
و الثاني تكون قيمته 1
و هكذا.
في المثال التالي قمنا بتعريف enum إسمه Days
يمثل أيام الأسبوع.
بعدها قمنا بإنشاء كائن منه و جعلناه يساوي أحد الثوابت الموجودة في Days
و من ثم طباعة قيمته.
مثال
سنحصل على النتيجة التالية عند التشغيل.
today value = 0
في المثال السابق قد تقول لما كل هذا العذاب!
لما لا نقوم بتعريف المتغير today
بشكل مباشر كالتالي ؟!
معلومة مهمة
في المثال السابق, لو قمت بتعريف today
كمتغير عادي, كان بإمكانك وضع أي قيمة تريد فيه مثل 20
أو أي قيمة أخرى.
فائدة تعريف today
ككائن من Days
هو أنك أصبحت مجبر على استخدام الثوابت الموجودة فيه لتحديد قيمة today
مما يجعلك تضمن أنه لا يمكن تمرير أي قيمة عشوائية غير القيم التي قمت أنت بتحديدها فمثلاً في المثال السابق يمكنك أن تغيير قيمة الكائن today
كالتالي.
مفاهيم مهمة حول النوع enum
المفهوم الأول
هنا وضعنا مثال يوضح طريقة تعيين قيم للثوابت الموضوعة في enum و كيفية الإستفادة من هذه القيم.
المفهوم الثاني
هنا وضعنا مثال يعلمك كيف تقوم بالتشييك على قيمة الكائن الذي ننشئه من enum باستخدام الجملة switch مما يجعل كتابة الكود أكثر سهولة و وضوح.
المفهوم الثالث
هنا وضعنا مثال يوضح كيفية تعريف دالة تأخذ باراميتر نوعه enum و كيفية تمرير قيمة لها عند استدعاءها.