C Academy · درس

تعريف Enums

أنشئ قيمًا مسمّاة سهلة القراءة

الدرس 1 من 413 خطوة

تعريف Enums درس مجاني في C Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C Academy 4 دروس في المجموع.

ما هو Enum؟

التعداد (enum) هو نوع يعرّفه المستخدم ويجمع مجموعة من الثوابت الصحيحة ذات الأسماء.

بدلًا من تذكّر أن 0 يعني الاثنين وأن 1 يعني الثلاثاء، تمنحون هذه الأعداد أسماء واضحة. وهذا يجعل الكود أوضح وأقل عرضة للأخطاء.

البنية الأساسية

تصرّحون عن enum باستخدام الكلمة المفتاحية enum، واسم وسم، وقائمة من الأسماء بين أقواس معقوفة.

يصبح كل اسم ثابتًا يمكنكم استخدامه في أي موضع يُتوقع فيه عدد صحيح.

enum Weekday { MON, TUE, WED, THU, FRI };

تبدأ القيم الافتراضية من 0

يكون الاسم الأول 0 افتراضيًا، ويكون كل اسم تالٍ أكبر بواحد من الاسم السابق.

لذلك، في enum Weekday، تكون MON مساوية لـ 0، وTUE مساوية لـ 1، وWED مساوية لـ 2، وهكذا.

#include <stdio.h>
enum Weekday { MON, TUE, WED, THU, FRI };
int main(void) {
    printf("%d %d %d\n", MON, TUE, WED);
    return 0;
}

التصريح عن متغير من نوع Enum

بعد إنشاء نوع enum، يمكنكم إنشاء متغيرات من ذلك النوع.

يحتوي المتغير على إحدى القيم المسماة. وهو في جوهره مجرد int.

#include <stdio.h>
enum Weekday { MON, TUE, WED, THU, FRI };
int main(void) {
    enum Weekday today = WED;
    printf("today = %d\n", today);
    return 0;
}

لماذا تحسّن Enums قابلية القراءة

قارنوا بين if (state == 2) وif (state == PAUSED).

الصيغة الثانية توضّح معناها بنفسها. تتيح لكم Enums أن يتتبع المصرّف المعنى، بينما تقرؤون قيمًا واضحة ومسمّاة بدلًا من أعداد غامضة.

enum Status { RUNNING, PAUSED, STOPPED };

استخدام Enums مع switch

تتوافق Enums طبيعيًا مع عبارات switch. وتصبح كل قيمة مسماة تسمية حالة واضحة.

وهذا أحد أكثر الاستخدامات الشائعة لـ Enums في الواقع العملي.

#include <stdio.h>
enum Status { RUNNING, PAUSED, STOPPED };
int main(void) {
    enum Status s = PAUSED;
    switch (s) {
        case RUNNING: printf("running\n"); break;
        case PAUSED:  printf("paused\n");  break;
        case STOPPED: printf("stopped\n"); break;
    }
    return 0;
}

En​​ums مجرد أعداد صحيحة

يمكن استخدام ثوابت Enum بالتبادل مع الأعداد الصحيحة. ويمكنكم إجراء العمليات الحسابية والمقارنات عليها.

تُعد هذه المرونة مفيدة، لكنها تعني أيضًا أن C لن تمنعكم من تخزين عدد خارج النطاق.

#include <stdio.h>
enum Level { LOW, MID, HIGH };
int main(void) {
    enum Level next = LOW + 1;
    printf("%d\n", next);
    return 0;
}

Enums مجهولة الاسم

يمكنكم حذف اسم الوسم إذا كنتم تحتاجون إلى الثوابت فقط، لا إلى نوع مسمى.

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

#include <stdio.h>
enum { RED, GREEN, BLUE };
int main(void) {
    printf("%d %d %d\n", RED, GREEN, BLUE);
    return 0;
}

اصطلاحات التسمية

وفقًا للاصطلاح، تُكتب أسماء ثوابت enum بصيغة UPPER_CASE، مثل الماكروات.

يشير ذلك إلى القرّاء بأن القيمة ثابتة. وغالبًا ما يستخدم اسم الوسم CamelCase أو PascalCase.

enum TrafficLight { LIGHT_RED, LIGHT_YELLOW, LIGHT_GREEN };

الدمج مع typedef

تكرار كتابة enum Weekday في كل موضع أمر مطوّل. وتتيح لكم typedef استخدام اسم مختصر.

بعد typedef، يمكنكم التصريح عن المتغيرات بصيغة Weekday today; من دون الكلمة المفتاحية enum.

#include <stdio.h>
typedef enum { MON, TUE, WED } Weekday;
int main(void) {
    Weekday d = TUE;
    printf("%d\n", d);
    return 0;
}

نطاق ثوابت Enum

تشترك أسماء ثوابت enum في مساحة الأسماء نفسها مع المعرّفات العادية ضمن نطاقها.

وهذا يعني أن تعدادين في النطاق نفسه لا يمكنهما إعادة استخدام اسم الثابت ذاته. اختاروا أسماء مميزة لتجنب التعارضات.

enum A { OPEN, CLOSED };
enum B { LOCKED, UNLOCKED };

تحقق سريع

اختبروا فهمكم للقيم الافتراضية في enum.

مراجعة

يعرّف enum ثوابت صحيحة مسماة. تكون قيمة الأول 0، وتزيد قيمة كل اسم تالٍ بمقدار واحد ما لم تحددوا خلاف ذلك.

تجعل Enums الكود مقروءًا، وتتوافق جيدًا مع switch، ويمكن اختصارها باستخدام typedef. سنستكشف بعد ذلك القيم والنطاقات المخصصة.

البدء مجانًا

تعلم C مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
39
الدروس
144

الأسئلة الشائعة

هل درس «تعريف Enums» مجاني؟

نعم — نص درس «تعريف Enums» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C Academy 4 دروس في المجموع.

ماذا ستتعلم في «تعريف Enums»؟

أنشئ قيمًا مسمّاة سهلة القراءة تتمرن على C Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C Academy؟

لا تُشترط خبرة سابقة. C Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «تعريف Enums»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C Academy هذا؟

نعم. كل درس في C Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تعريف Enums
  2. قيم Enum والنطاقات
  3. متغيرات const
  4. ثوابت #define
← العودة إلى C Academy