Javaالنوع enum
في جافا
- مفهوم النوع
enum
- التعامل مع النوع
enum
- أمثلة شاملة حول النوع
enum
مفهوم النوع enum
enum
هي كلمة محجوزة في جافا, تستخدم لتعريف عدة ثوابت ضمن مجموعة واحدة بشكل منطقي.
و في النهاية تعتبر هذه المجموعة كنوع جديد من البيانات و فيها عدة قيم محتملة.
النوع enum
مفيد جداً في حال أردت بناء كود مخصص فقط للتعامل مع نوع محدد من القيم و في حال حاول أي مبرمج آخر عدم الإلتزام بنوع البيانات الذي فرضته أنت و قام بتمرير قيم من نوع آخر فإنه يتم تنبيهه مباشرةً قبل تشغيل الكود و في حال أصر على ذلك و قام بتشغيل الكود فإن مترجم لغة جافا سيمنعه وقت التشغيل و يظهر له خطأ.
بشكل عام, في حال أردت تعريف مجموعة قيم مترابطة يستحيل أن تتبدل فالخيار الأمثل هو تعريف هذه القيم في الأساس بداخل enum
.
أمثلة حول بعض المعلومات الثابتة في الحياة و التي أيضاً تعتبر ثابتة في المنطق هي:
- فصول السنة ( الخريف, الشتاء, الربيع, الصيف )
- الإتجاهات ( الشمال - الجنوب - الشرق - الغرب )
- أيام الأسبوع ( الإثنين - الثلاثاء - الأربعاء إلخ.. )
- أشهر السنة ( كانون الثاني - شباط - آذار إلخ.. )
- الجنس ( ذكر - أنثى )
عند التعامل مع هذا النوع الثابت من البيانات و الذي لا نريد لأحد أن يعبث به فإننا نستخدم النوع enum
و هذا ما سنراه لاحقاً في الأمثلة.
مصطلحات تقنية
الـ enum
يقال له تعداد في اللغة العربية حيث نضع فيه مجموعة عناصر.
التعامل مع النوع enum
التعامل مع الـ enum
يشبه كثيراً التعامل مع الكلاس المعرف كـ final static
حيث لا يمكن إنشاء كائنات منه و يمكن الوصول بشكل مباشر للثوابت الموضوعة فيه.
نقاط مهمة حول النوع enum
- يزيد أمان أنواع البيانات التي سيتم التعامل معها.
- يمكن إستخدامه في الجملة
switch
. - يمكن تعريفه ضمن ملف خاص مثل الكلاس و يمكن تعريفه ضمن كلاس.
- كل ثابت فيه, عبارة عن كائن من نفس نوعه و يعتبر نوعه
public final static
. - يمكنه أن يحتوي على متغيرات, دوال, كونستركتورات.
- لا يمكن إنشاء كائنات منه و لا داعي لذلك أصلاً لأنه يمكن الوصول لثوابته بشكل مباشر.
- عند تعريف كونستركتور فيه فإنه يجب تعريفه كـ
private
لأنه لا يمكن إنشاء كائنات منه و هذا أمر منطقي. - يمكنه أن يفعل
implements
لإنترفيس أو أكثر. - لا يمكنه أن يرث من أي كلاس لأنه في الواقع يرث من كلاس إسمه
Enum
. - يمكنك إستدعاء الدالة
values()
من أيenum
للحصول على مصفوفة من نفس نوعه و فيها نسخة من كل قيمه.
معلومة تقنية
كل ثابت تضعه في الـ enum
يتم إعطاؤه رقم Index ابتداءاً من الرقم 0 يشير لموقعه فيه مثل المصفوفة.
فمثلاً العنصر الأول يعطى Index رقم 0 و العنصر الثاني يعطى Index رقم 1 و هكذا.
يمكنك معرفة رقم الـ Index المعطى لأي ثابت في الـ enum
بواسطة الدالة ordinal()
و لكنك على الأغلب لن تحتاج إلى ذلك.
أمثلة شاملة حول النوع enum
المثال الأول
ستتعلم من المثال التالي كيف تقوم بتعريف enum
بداخل كلاس بالإضافة إلى معرفة كيف يمكن الوصول للثوابت الموجودة فيه و معرفة Index الثابت.
المثال الثاني
ستتعلم من المثال التالي كيف تقوم بعرض جميع الثوابت الموجودة في الـ enum
بالإعتماد على الدالة values()
و الحلقة for each.
المثال الثالث
ستتعلم من المثال التالي كيف تقوم بتخزين ثابت موجود في enum
بداخل كائن من نفس نوعه.
المثال الرابع
ستتعلم من المثال التالي كيف تقوم بتحديد قيمة كل ثابت في الـ enum
.
المثال الخامس
ستتعلم من المثال التالي كيف تضع أكثر من قيمة لكل ثابت في الـ enum
.
المثال السادس
ستتعلم من المثال التالي كيف تعرف قيمة الثابت الذي إختاره المستخدم من الـ enum
بواسطة الجملة switch
.
المثال السابع
ستتعلم من المثال التالي كيف تقوم بتعريف enum
في ملف خاص بطريقتين.
فعلياً, ستتعلم كيف تستطيع إنشاء كلاس عادي و من ثم تحويله لـ enum
. و ستتعلم كيف تستطيع إنشاء enum
مباشرةً في برنامج NetBeans.
المثال الثامن
ستتعلم من المثال التالي أهمية الـ enum
في حماية الكود خاصةً إذا كنت تعمل ضمن فريق و تريد أن يلتزم زملاؤك بالأنواع التي يمكن إستخدامها.