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

من الاستخدامات الشائعة للenum ,الاختيار بين عدة خيارات

بدأه apex في 27 أغسطس 2010 · 10 رد · 681 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

من مميزات الenum انة ثابت الحجم وغالبا يكون فى حجم الint مهما ذات عدد عناصرة .

وهذة الميزة جعلتة المفضل لدى مبرمجى السى ليكون بمثابة حامل للoption فمثلا اذا تخيلنا دالة ترسم دائرة (مساحتها ثابتة) ويمكن تلوينها بعدد من الالوان وليكن

enum color{
White,
Red,
...
Black
};

فلنستخدم typedef (لا احد يستعمل struct او union او enum بدون typedef تجنبا للكتابة الزائدة)

typedef enum{
....
}Color;

ونجعل الدالة على تلك الشاكلة

circle_color(Circle* , Color color);

ويمكن مناداتها على الشاكلة

circle_color(objptr , Red);

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

مكتبة GTK مثال لاستخدام الكثيف لenum بتلك الطريقة.

تم تعديل هذه المشاركة بواسطة apex في 27 أغسطس 2010 في 14:24

1

name : mohamedyosry

#2

شكرا يا أخي...

بالنسبة ل GTK ... فلقد نظرتُ عليها ذات مره - نظره خاطفه - ووجدها كما يقولون tooo much ...

يعني يقومون بمحاكات ال oop داخل السي مما يؤدي لتعقيدها .......

فهل عملت مع GTK ؟؟؟ و مارأيت بها .... و ما رأيك في GTK-- ؟؟

فأنا لو سأستخدم GTK فسأستخدم GTK--

#3

@ هويدي

مازالت فى ايامى الاولى فى GTK ولكنى من اجل الحيادية فQT متقدمة بمراحل من حيث اراحة المبرمج.هذا ليس كلامى ولكن من حديث اشخاص لهم خبرة طويلة مع المكتبتين ويرون خصائص مازال يفكرون فى تضمنيها فى gtk قد ضمنت منذ زمن فى كيوت .

ونقطة اخرى انك اذا فكرت فى برمجة الواجهات بدون OO بنظرى ستجدها صعبة جدا (وضعيفة) وستضيفها تعقيد لا سهولة . لذا كان مش شبة الضرورى ان يكون لهم مفهوم يحاكى الOO حتى لو ظاهريا . لذا اذا اردت لغة منسجمة بشكل جيد مع برمجة الواجهات بgtk فvala كودها افضل فى ذلك .

بالنسبة لل learning curve الخاص بgtk فهو متضخم نوعا ماء (فى البداية) لفهم اسلوب المكتبة واكتساب مفاهيمها ولكن بعد ذلك تعتاد عليها وتجدها سهلة.

وهناك الكثير من الاشياء التى اعتبرها مميزات لgtk ان حدودها مفتوحة بشكل كبير للوصول لدوال الرسم بتحكم كبير واحيانا الوصول للlow-level والدليل صناعة customized widget بها رائعة (مثل Avant Window Navgator ,gnome do ) ومعظم الwindowing manager (هذا السبب شبة الرئيسى لبدء تعلمى gtk حاليا) .

بخصوص too much فهذا شى مطلوب حين التفكير فى frame-work متكاملة لتطوير التطبيقات ولكن الشخص يستخدم ما يريدة منها حين يريدة .

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

اقتباس
فأنا لو سأستخدم GTK فسأستخدم GTK--

اجعل السى++ لكيوت ;) ولكنها اسرع فى التطوير ومناسبة بشكل افضل لحيز كبير من التطبيقات(حيث تتطلب سرعة تطوير وتراة بكيوت الكثير من الادوات الجاهزة لانهائها بسرعة)(وهناك مناطق اراها افضل لgtk منها المرونة وخفة المكتبات)

تم تعديل هذه المشاركة بواسطة apex في 27 أغسطس 2010 في 15:16

name : mohamedyosry

#4

هل ممكن أن تخبرني ما الفرق بين كتابه enum مع أو بدون typedef ؟ وما الذي تقصده في تفادي الكتابه الزائده؟

شكرا..

#5

@ مهدي حجازي

فى السى الenum و struct وunion بعد تعريفهم بتلك الطريقة

enum color{
White,
Red,
...
Black
};

فعند عمل عنصر منهم يجب كتابة

enum color x;

فكما لاحظت اننا كتبنا كلمتين لنعرف متغير وليس كلمة واحدة (لان من الممكن فى السى ان يكون اسم متغير و struct واحد فلابد من كتابة التعريف بشكل مطول).

للتغلب على ذلك قاموا باستغلال خاصتين للتخلص من هذا الازعاج ,الخاصية الاولى هى الunamed للتراكيب مثل

enum {
White,
Red,
...
Black
}color;

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

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

typedef int* xptr;

فبعد ذلك السطر يمكن بدل كتابة int* يمكن كتابة xptr

xptr x = &i

بدلا عن

int *x= &i

النقطة ان العادة ادت لدمج الاثنين فى انشاء التراكيب

typedef enum{
....
}Color;
Color xcolor;
1

name : mohamedyosry

#6

شكرا جزيلا أخ apex لمشاركتنا خبرتك .......

لقد نظرت نظره سريعه على GTK و ما لم يعجبني فيها موضوع glib و هو إعاده تعريف معظم الأشياء الموجوده في ال c std lib (مثل gint, galloc, gfree إلخ).

ربما يكون هدفي من تعلم سي/سي++ ليس لبرمجه واجهات ... لذا بعدت عنها..

@مهدي typedef بتعيد تعريف نوع البيانات (datatype)

و تستخدم لغرض تقليل حجم الكتابه (غالبا)...

فمثلا بدل من :

enum color{RED, GREEN, BLUE};
// to use:
enum color my_color = RED;

نستخدم:

enum color{RED, GREEN, BLUE};
typedef enum color color_t;
// to use:
color_t my_color = RED;

لاحظ في السي لكي نستخدم enum أو struct لابد أن نكتب كلمة struct أو enum متبوعه بإسم الفئة (أي كأننا نكتب في الجافا عند التصريح : class Employee ee )

و بالتالي نعرف نوع جديد نسمه color_t مثلا و نقول بأنه مكافئ ل enum color ... و بالتالي نستطيع إستخدام color_t أينما وجد enum color ....

تم تعديل هذه المشاركة بواسطة هويدي في 27 أغسطس 2010 في 18:51

1
#7

@هويدى

ماهى الا typedef من اجل المحمولية .

لكن فعليا تعلمها ليس مطلوبا طالما لا تنوى التطوير بها او فى احد برامجها .

name : mohamedyosry

#8

هذا بالنسبة لل gint, gfloat, gpointer ...

لكن هناك دوال جديده (قد تستخدم دوال موجوده) ...... مثلا الدوال الجديده في أدارة الذاكره + عدم وجود overloading فتجد الدوال بهذا الشكل..

g_malloc_new

g_malloc_new2

:D

#9

@هويدى

اقتباس
لكن فعليا تعلمها ليس مطلوبا طالما لا تنوى التطوير بها او فى احد برامجها .

اقصد مكتبة GTK ككل وليس ادواتها .

للتطوير فى برنامج لا يتعلق بgtk فتعلم gtk ليس لة نفع.

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

name : mohamedyosry

#10
هويدي كتب:

هذا بالنسبة لل gint, gfloat, gpointer ...

لكن هناك دوال جديده (قد تستخدم دوال موجوده) ...... مثلا الدوال الجديده في أدارة الذاكره + عدم وجود overloading فتجد الدوال بهذا الشكل..

g_malloc_new

g_malloc_new2

:D

أغلب المكتبات ستجدها تعيد تعريف اسماء الدوال و الانواع و لذلك لتسهيل عملية الـ debug اثناء تصنيع المكتبه، و ثانيا لأجل المحموليه فمثلا جميعا نعرف النوع int لذا داخل مكتبة gtk قد يتم إعادة تعريفه ليكون gint و فى الإصدار الثانى من المكتبه يتم تغيير الكيفيه التى تعمل بها المكتبه لتصبح gint ليست مجرد int و لكن struct gint و يتم توفير دوال لجعلها تعمل مثل السابق تماما، و بالتالى تظل البرامج التى بنيت على المكتبه تعمل بشكل سليم و ايضا تم تغيير البنية الداخليه للمكتبه بنجاح.

ملحوظه: انا لا اعرف تكوين مكتبة gtk و المثال بالأعلى فقط لتقريب وجهة النظر

و الله ولي التوفيق

تم تعديل هذه المشاركة بواسطة محمد علاء الدين في 27 أغسطس 2010 في 20:24

مدونتي: C++ Tips and Tricks

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…