الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ماهو الenum ...؟؟ مقالة تفصل هذا الموضوع بالكامل ..

بدأه سنان محمد صالح في 13 يناير 2008 · 15 رد · 16,909 مشاهدة · في المواضيع والدروس
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

في هذه المقالة سندرس ال Enum .. ماهو .. وماهي فائدته .. وكيف نستخدمه ..

نبدأ على بركة الله ..

كلمة Enum هي مختصرة من المصطلح Enumeration ..معناه بالعربية تعداد ..

فالEnumeration هو نوع يتم تعريفه من قبل المستخدم .. ومميزات هذا النوع انه عبارة عن مجموعة من العناصر ..

اي ان هذا النوع يتكون من عناصر فهو ليس الكلاس .. فلا يحتوي على دوال او متغيرات او اي شئ اخر .. وانما هو نوع يتكون من عناصر .. فاسم التابع للنوع المبرمج بال enum يحتوي على عناصر ذلك النوع ..

فمثلا ..

يمكننا انشاء Enumeration خاص بايام الاسبوع ..

اي انه يمكننا ان نبرمج تعداد مجموعة خاصه بايام الاسبوع .. فاسم النوع سيكون week وتحت اسم هذا النوع يوجد اسماء ايام الاسبوع .. فنبدأ باحد ... اثنين .. ثلاثاء الى اخر يوم وهو السبت ...

تستخدم الكلمة المحجوزه enum لتعريف النوع الجديد ..

الشكل العام ..او القاعدة العامه ..

enum [tag] [: type] {enum-list} [declarator];   // for definition of enumerated type
enum tag declarator;   // for declaration of variable of type tag

سنقوم الان بتفصيل القاعده اعلاه ..

اولا .. enum ..تستخدم لتخبر المترجم بان الاسم الذي بعدها هو اسم النوع الجديد المعرف ..

ثانيا .. tag .. تشير هذه الكلمة في القاعده الى اسم الEnumeration الذي نريد تعريفه ..

ثالثا .. {enum-list} في داخل هذه الاقواس نقوم بوضع او كتابة العناصر التي نريد ان يتضمنها النوع الجديد ..

رابعا .. بعد تتم عملية تعريف اسم النوع وعناصره .. نستخدم هذا الاسم لتعريف متغير تابع لهذا النوع ..

والمتغير الجديد الناتج هذا يحتوي على قيمة والقيمة هي احدى عناصر النوع الجديد .. ونحن نقوم باعطاء تلك قيمة ذلك العنصر كقيمة ابتدائية ..

مثال عن تعريف نوع جديد خاص بماركات السيارات وهو على الشكل التالي ..

enum e_acomany {
	Audi,
	BMW, 
	Cadillac, 
	Ford,
	Jaguar, 
	Lexus 
	Maybach, 
	RollsRoyce, 
	Saab
};

اسم النوع هنا هو e_acomany ويحتوي على العناصر (اسماء ماركات السيارات ) .

ملاحظة مهمة جدا وهي انه عند تعريف العناصر الخاصه بنوع جديد توضع فارزة عادية بين عنصر وعنصر .. على الشكل التالي ..

enum en_name{ element1 , element2 }

اي يمكن القول بانها تشبه المجموعات بالرياضيات ..

اسم المجموعة ثم يتبعها قوس المجموعه والعناصر وبين عنصر وعنصر فارزة تفصل بين العناصر ..

اكملنا الان تعريف النوع ..

ولكن بقي لدينا تعريف متغير من هذا النوع الجديد واعطاء قيمة له ..

وهي عملية بسيطة تشبه تعريف المتغيرات بالصورة العادية ..

int x = 1;

وهي على الصيغة التالية ..

e_acompany my_car_brand;
my_car_brand = RollsRoyce;

فنجد اننا قمنا باستخدام اسم enum اي اسم النوع وهو e_acompany وبعده my_car وهو اسم المتغير واعطيناه القيمة RollsRoyce وهو احد العناصر التي وضعناها في داخل الenum اثناء تعريف النوع ..

لنأخذ المثال التالي ..

	main ()
	{
		enum Currancy = {STERLING, DOLLAR, RUPEE};

		enum Currancy GreenBack = DOLLAR;	 // Valid in C and C++
		Currancy Pounds = STERLING;		   // Valid in C++ only.

	}

والمثال التالي ايضا ..

main ()
	{
		enum Currancy = {STERLING, DOLLAR, RUPEE};

		Currancy Pounds = STERLING;

		Pounds = 2;			 // Invalid Statement.

		Pounds++;			   // Invalid Statement.
	}

من خلال المثالين السابقين لاحظنا الاخطاء التي يجب ان ننتبه لها ونراعيها عند استعمالنا لل enum . ..

ملاحظة اخيره ومهمة جدا ..

افتراضيا .. كل عنصر من عناصر النوع الجديد المبرمج .. ياخذ رقم تعداد خاص به .. ويبدأ اول عنصر من عناصر المجموعة الجديده بالرقم صفر .. ولكن لا يمكننا استخدام هذه الارقام الخاصه بالعناصر في برامجنا بصورة مباشرة ...

اي انه لايمكن ان نستعمل رقم العنصر مع المتغير اثناء تعريفه .. وهذا ما ورد في المثال الاخير ..

Pounds = 2;			 // Invalid Statement

وانما نعطي اسم العنصر للمتغير لكي يحتويه بداخله ..

ه

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#2

ممتاز أخ سنان ،

وترجمه "تعداد" هذه أول مره أسمع بها من قبل ، وان كنت أفضل أن أطلق على Enum بمجموعه من الثوابت .

وأكثر ما استخدمها في switch statment

فاذا كانت هناك قائمه :

1- لادخال مثلا بيانات طالب

2- لحذف بيانات طالب

ويقوم المستخدم بادخال نوع العمليه (1 أو 2 ... ) .

فبدلا من أن تكون بهذا الشكل :

swicth ( anyVariable ) 
{
case 1 :
// here processing for 1
break;

case 2:
// here processing for 2
break;

// and so on
};

نعرف :

enum { INSERT=1 , DELETE,EDIT};

ونقوم الان بتغيير الأرقام :

switch ( AnyVariable )
{
case INSERT :
// here processing for insert name
break;

case DELETE :
// here processing for delete 
break;

// and so on
};

فقط مزيد من المقروئيه Readabiltiy :) .

أيضا استخدام أخر ، وهو عند تعريف ثابت ما داخل كلاس ، ونريد أعطائه قيمه مباشره أثناء تعريفه .

class Type
{
int x;
const int c; // here we cannot assing value to c
enum { MAX=10}; // here we can assign value to MAX
};

جزيت خيرا أخي .

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#3

جميل جدا اسلوبك في المقاله اسلوب معلم ماشاء الله عليك.

tvquran_6.gif

#4

الله يكتب اجرك ..

درس جميل جدا واستفدت منه كثيرا ..

دمت في خير ..,

#5

السلام عليكم ,,

شكراً أخ سنان على هذا الدرس B)

كما قال أخي romansy,,

اقتباس
فقط مزيد من المقروئيه Readabiltiy

إضافة إلى ذلك, يمكن تمرير الـ enums إلى الدوال على شكل وسائط, و فائدة هذا الشيء أنه عند إرسال قيمة غير مذكورة في تعريف الـ enum سيصدر المترجم خطأ ينبهنا على ذلك,,

تحياتي ,,

#6

اشكركم اخوان على ردودكم الجميلة ..

شكرا اخي رومانسي على اضافتك ..

تحياتي العطرة للجميع ..

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#7

شكراً لك أخي سنان على الشرح وشكراً للأخ romansy على الإضافة الجميلة..

#8

الف شكــر على هالمقال المفيــد

محتــآجين مواضيع كذا

جززاك الله كل خير

#9

شكرا اخوي على المقال

#10

بســم الله الـرحمــن الرحيــم

السلام عليكــم ورحمـة الله وبركاتــه

بالفعل مقال (مرتب) الله يجزيك الخير

#11

مشكور أخ سنان على هذا الدرس الرائع

تم تعديل هذه المشاركة بواسطة MoHammaD_93 في 1 يوليو 2009 في 15:25

SAFETY TIP : Always delete what you new, and free what you malloc, never mix new with free or malloc with delete.

#12

شكرا اك

يعطيك العافية

#13

شكراً لك اخي الكريم

وده كود للتوضيح بالجافا

public class Ech {
    enum Sound { loud, soft, raspy, smooth };
    public static void main(String arg[]) {
        Sound truck = Sound.loud;
        Sound song = Sound.smooth;
        System.out.println(truck);
    }
}

تم تعديل هذه المشاركة بواسطة elfares في 26 يوليو 2009 في 14:38

#14

مع اني ما استخدم الـ enum ابدا لكن مشكور على التوضيح هذا... لأني صراحة كل ما اشتري كتاب اطوف اي فقرة تتكلم عن الـ enum

انا قريت ان الـ enum ماهو إلا const unsigned int او شغلة جذي

:::كوت بو 6:::

IDE : Microsoft Visual Studio 2005 Pro

#15

السلام عليكم ...

اقتباس
انا قريت ان الـ enum ماهو إلا const unsigned int او شغلة جذي

لايهم الـ representation, المهم هو طريقة الاستعمال.

استعمال الـ enums طريقة ممتازة لتمرير القيم الثابتة إلى الدوال مثلاً. عندما تمرر ios::binary أو ios::out و هكذا فأنت تمرر enum حسبما أعتقد :)

عموماً, هناك إضافات لمفهوم الـ enums في cpp1x و لكني لم أطلع عليها كثيراً,

تحياتي ,,,

#16

جزاك الله خيرا اخى سنان على هذا المجهود وننتظر منك المزيد

amdvsintel22.jpg

--i use AMD--

لا اله الا الله محمد رسول الله

أستعن بالله و لا تعجز

تابعنى على تويتر

***

مواضيع مشابهة