1. مقدمة
تعد enum
(التعداد) في لغة البرمجة C أداة مهمة لتحسين قابلية قراءة التعليمات البرمجية وسهولة صيانتها. في هذه المقالة، سنشرح بالتفصيل كيفية استخدام enum
، بدءًا من الاستخدامات الأساسية وحتى التطبيقات المتقدمة. سواء كنت مبتدئًا أو متوسطًا، سيساعدك هذا الدليل على إتقان استخدام enum
واكتساب المهارة لكتابة تعليمات برمجية بلغة C أكثر كفاءة.
2. ما هو enum
؟
تعريف ودور enum
يُطلق على enum
اسم “النوع العددي” وهو نوع بيانات يُستخدم لتعريف مجموعة من الثوابت. عادةً ما يُستخدم لإعطاء أسماء سهلة التمييز لعدة ثوابت ذات صلة. على سبيل المثال، عند التعامل مع الألوان في برنامج، فإن إدارتها بالأرقام غير بديهية. ومع ذلك، باستخدام enum
، يمكنك تعريف الألوان بأسماء مثل RED
وGREEN
وBLUE
.
لماذا نستخدم enum
؟
باستخدام enum
، يمكنك الحصول على الفوائد التالية:
- تحسين قابلية قراءة التعليمات البرمجية: نظرًا لأنه يمكن التعبير عن القيم بالأسماء بدلاً من الأرقام، يصبح فهم التعليمات البرمجية أسهل.
- سهولة الصيانة: حتى إذا تغيرت مجموعة الثوابت، فإن استخدام
enum
يقلل من تأثير التغييرات على التعليمات البرمجية بأكملها. - الوقاية من الأخطاء: إذا كنت ترغب في حصر القيم بقيم معينة، فإن استخدام
enum
يمنع استخدام القيم الخاطئة.

3. الاستخدام الأساسي لـ enum
طريقة تعريف enum
يتم تعريف enum
الأساسي على النحو التالي:
enum { RED, GREEN, BLUE };
في هذه الحالة، يتم تعيين RED
تلقائيًا إلى 0، وGREEN
إلى 1، وBLUE
إلى 2. إذا كنت ترغب في تسمية enum
، فسيتم وصفه على النحو التالي:
enum Color { RED, GREEN, BLUE };
لقد أنشأت enum
باسم Color
، ويمكنك استخدام هذا الاسم لتعريف المتغيرات.
نموذج تعليمات برمجية فعلية
فيما يلي نموذج بسيط للتعليمات البرمجية باستخدام enum
:
#include <stdio.h>
enum Color { RED, GREEN, BLUE };
int main() {
enum Color color;
color = RED;
printf("%dn", color); // الإخراج: 0
return 0;
}
في هذه التعليمات البرمجية، يتم إخراج RED
على أنه 0
.
4. الاستخدام المتقدم لـ enum
التعيين التلقائي والتعيين اليدوي لقيم enum
يقوم enum
بتعيين القيم تلقائيًا بدءًا من 0
، 1
، 2
… افتراضيًا. ومع ذلك، من الممكن أيضًا تعيين قيم محددة يدويًا.
enum Days {
MONDAY = 1,
TUESDAY,
WEDNESDAY,
THURSDAY = 10,
FRIDAY
};
في هذا المثال، تم تعيين MONDAY
إلى 1
، وTUESDAY
إلى 2
، وTHURSDAY
إلى 10
. سيتم تعيين FRIDAY
تلقائيًا إلى 11
.
استخدام enum
في جملة switch-case
غالبًا ما يتم استخدام enum
مع جملة switch-case
. باستخدام enum
، تصبح تعليمات البرمجية للفرع الشرطي أكثر وضوحًا.
enum Color { RED, GREEN, BLUE };
int main() {
enum Color color = BLUE;
switch(color) {
case RED:
printf("Redn");
break;
case GREEN:
printf("Greenn");
break;
case BLUE:
printf("Bluen");
break;
default:
printf("Unknown colorn");
}
return 0;
}
في هذه التعليمات البرمجية، يتم عرض رسائل مختلفة اعتمادًا على قيمة المتغير color
. باستخدام أعضاء enum
في جملة switch-case
، يتم تحسين قابلية قراءة التعليمات البرمجية.
استخدام enum
كمؤشر مصفوفة
يمكن أيضًا استخدام enum
كمؤشر لمصفوفة.
enum Color { RED, GREEN, BLUE };
char* color_names[] = { "Red", "Green", "Blue" };
printf("%sn", color_names[RED]); // الإخراج: Red
في هذه التعليمات البرمجية، يتم الحصول على سلسلة نصية معينة من مصفوفة باستخدام قيمة enum
.

5. ملاحظات وأفضل الممارسات لـ enum
تكرار القيم والقيم خارج النطاق
يُسمح بتكرار القيم داخل enum
، ولكن يجب تجنبه من منظور قابلية قراءة التعليمات البرمجية وسهولة صيانتها.
enum Days {
MONDAY = 1,
FRIDAY = 1
};
في هذه الحالة، سيكون لـ MONDAY
وFRIDAY
نفس القيمة، ولكن قد يؤدي ذلك إلى سلوك غير مقصود. بالإضافة إلى ذلك، من الممكن تعيين قيم غير معرفة في enum
، ولكن يجب تجنب ذلك أيضًا.
enum Days { MONDAY = 1, TUESDAY = 2 };
enum Days day = 8; // لن يؤدي ذلك إلى خطأ في الترجمة
تحسين قابلية قراءة التعليمات البرمجية باستخدام enum
يجب استخدام enum
بنشاط لتحسين قابلية قراءة التعليمات البرمجية. استخدام enum
يجعل القصد أكثر وضوحًا ويمنع الأخطاء مقارنة بالفرع الشرطي بالأرقام.
6. أمثلة على التعليمات البرمجية التي تستخدم enum
مقارنة التعليمات البرمجية بدون enum
ومع enum
دعونا نقارن التعليمات البرمجية بدون enum
ومع enum
.
عند عدم استخدام enum
void findNearest(int day) {
switch(day) {
case 0:
printf("اليومn");
break;
case 1:
printf("قبل يومn");
break;
// تم الحذف
}
}
عند استخدام enum
enum Days { TODAY, YESTERDAY };
void findNearest(Days day) {
switch(day) {
case TODAY:
printf("اليومn");
break;
case YESTERDAY:
printf("قبل يومn");
break;
// تم الحذف
}
}
باستخدام enum
، يصبح قصد التعليمات البرمجية أكثر وضوحًا وتتحسن قابليتها للقراءة.

7. الخلاصة
تعد enum
ميزة قوية في لغة C، حيث تعمل على تحسين قابلية قراءة التعليمات البرمجية وسهولة صيانتها. من خلال فهم كيفية استخدام enum
وتطبيقه بشكل صحيح، يمكنك كتابة برامج أكثر كفاءة وأقل عرضة للأخطاء. نأمل أن تساعدك هذه المقالة على فهم أساسيات enum
واستخداماته المتقدمة، وأن تكون مفيدة في تطويرك الفعلي.