قيم Enum والنطاقات
تحكّم في الأعداد الصحيحة الأساسية
قيم Enum والنطاقات درس مجاني في C Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C Academy 4 دروس في المجموع.
تعيين قيم صريحة
لستم مقيدين بالتسلسل الافتراضي 0 و1 و2. يمكنكم تعيين أي عدد صحيح لاسم باستخدام =.
يفيد ذلك عندما يجب أن تتطابق الأعداد مع نظام خارجي، مثل رموز حالة HTTP.
enum Http { OK = 200, NOT_FOUND = 404, ERROR = 500 };طباعة القيم المخصّصة
بعد التعيين، تكون الأعداد المخزنة والمطبوعة هي تلك القيم المحددة بالضبط.
تطابق أسماء enum هنا رموز HTTP القياسية مباشرة.
#include <stdio.h>
enum Http { OK = 200, NOT_FOUND = 404, ERROR = 500 };
int main(void) {
printf("%d %d\n", OK, NOT_FOUND);
return 0;
}الخلط بين القيم الصريحة والافتراضية
إذا عيّنتم بعض القيم وتركتم قيمًا أخرى فارغة، يواصل كل اسم فارغ العد بدءًا من القيمة السابقة.
لذلك يصبح الاسم الذي يلي مباشرةً = 10 مساويًا لـ 11، ثم 12، وهكذا.
#include <stdio.h>
enum N { A = 10, B, C, D = 100, E };
int main(void) {
printf("%d %d %d %d %d\n", A, B, C, D, E);
return 0;
}البدء من واحد
من الحيل الشائعة جعل القيمة الأولى 1 بدلًا من 0، بحيث يتطابق الترقيم مع العد البشري.
تكون MON هنا مساوية لـ 1، فتمتد الأيام من 1 إلى 7.
#include <stdio.h>
enum Day { MON = 1, TUE, WED, THU, FRI, SAT, SUN };
int main(void) {
printf("%d %d\n", MON, SUN);
return 0;
}السماح بالقيم المكررة
يمكن لاسمين من أسماء enum مشاركة قيمة صحيحة واحدة. لا تشترط C أن تكون هذه القيم فريدة.
يُستخدم ذلك أحيانًا لإنشاء أسماء بديلة للمفهوم نفسه.
#include <stdio.h>
enum Color { RED = 1, CRIMSON = 1, BLUE = 2 };
int main(void) {
printf("%d %d\n", RED, CRIMSON);
return 0;
}القيم السالبة
يمكن أن تكون قيم enum سالبة أيضًا؛ فهي أعداد صحيحة موقعة.
يتيح ذلك تمثيل رموز الأخطاء الأقل من الصفر إلى جانب نطاق محايد أو موجب.
#include <stdio.h>
enum Temp { COLD = -1, NORMAL = 0, HOT = 1 };
int main(void) {
printf("%d %d %d\n", COLD, NORMAL, HOT);
return 0;
}حيلة COUNT sentinel
إذا أدرجتم العناصر بدءًا من 0 وأضفتم اسمًا نهائيًا، فسيكون ذلك الاسم الأخير مساويًا لعدد العناصر.
تمنحكم حيلة COUNT هذه الحجم تلقائيًا، حتى بعد إضافة عناصر جديدة.
#include <stdio.h>
enum Fruit { APPLE, PEAR, KIWI, FRUIT_COUNT };
int main(void) {
printf("%d fruits\n", FRUIT_COUNT);
return 0;
}استخدام Enums كفهارس للمصفوفات
بما أن قيم enum أعداد صحيحة، فهي فهارس ممتازة للمصفوفات.
وبالاقتران مع حيلة COUNT، يمكنكم تحديد حجم المصفوفة بدقة وفهرستها باستخدام أسماء واضحة.
#include <stdio.h>
enum Fruit { APPLE, PEAR, KIWI, FRUIT_COUNT };
int main(void) {
int stock[FRUIT_COUNT] = {5, 3, 8};
printf("%d\n", stock[PEAR]);
return 0;
}النوع الأساسي
في لغة C القياسية، تُخزّن قيم enum في نوع صحيح يختاره المصرّف، وعادةً ما يكون int.
يكون النوع واسعًا بما يكفي لاحتواء كل قيمة تعرّفونها، ولذلك تستوعب الثوابت الكبيرة أو السالبة أيضًا.
#include <stdio.h>
enum Big { SMALL = 0, LARGE = 1000000 };
int main(void) {
printf("%d\n", LARGE);
return 0;
}عدم وجود تحقق مضمّن من النطاق
لا تمنعكم C من تعيين قيمة خارج القائمة إلى متغير enum.
يُصرَّف التعيين أدناه ويعمل. وتقع على عاتقكم مسؤولية إبقاء القيم صالحة.
#include <stdio.h>
enum Level { LOW, MID, HIGH };
int main(void) {
enum Level x = 99;
printf("%d\n", x);
return 0;
}التكرار عبر نطاق
عندما يمتد enum من 0 إلى قيمة COUNT sentinel، يمكنكم التكرار عبر كل قيمة باستخدام حلقة for بسيطة.
يمر هذا التكرار عبر كل عنصر معرّف حتى قيمة العدد، من دون تضمينها.
#include <stdio.h>
enum Fruit { APPLE, PEAR, KIWI, FRUIT_COUNT };
int main(void) {
for (int f = APPLE; f < FRUIT_COUNT; f++)
printf("%d ", f);
printf("\n");
return 0;
}تحقق سريع
حللوا قيم enum المختلطة.
مراجعة
يمكنكم تعيين قيم صريحة لـ enum، وخلطها بالقيم الافتراضية، وتكرار القيم، واستخدام القيم السالبة.
تتتبع حيلة COUNT sentinel حجم القائمة تلقائيًا، وتناسب Enums فهرسة المصفوفات بدرجة كبيرة. تذكروا: لا تجري C أي تحقق من النطاق، لذا تحققوا من القيم بأنفسكم.
الأسئلة الشائعة
هل درس «قيم Enum والنطاقات» مجاني؟
نعم — نص درس «قيم Enum والنطاقات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C Academy 4 دروس في المجموع.
ماذا ستتعلم في «قيم Enum والنطاقات»؟
تحكّم في الأعداد الصحيحة الأساسية تتمرن على C Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C Academy؟
لا تُشترط خبرة سابقة. C Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «قيم Enum والنطاقات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C Academy هذا؟
نعم. كل درس في C Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تعريف Enums
- قيم Enum والنطاقات
- متغيرات const
- ثوابت #define