Programming Basics SQL HTML CSS JavaScript Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Learn Typing

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 في حماية الكود خاصةً إذا كنت تعمل ضمن فريق و تريد أن يلتزم زملاؤك بالأنواع التي يمكن إستخدامها.

شاهد المثال