تعداد قصير ، تعداد نوع متغير يمكن العثور عليها في C (ANSI ، وليس K&R الأصلي) ، C ++ و ج #. الفكرة هي أنه بدلا من استخدام عدد لتمثيل مجموعة من القيم ، يتم استخدام نوع بمجموعة من القيم المقيدة بدلاً من ذلك.
على سبيل المثال ، إذا استخدمنا ألوان قوس قزح ، وهي
- أحمر
- البرتقالي
- الأصفر
- أخضر
- أزرق
- نيلي
- البنفسجي
إذا لم يكن التعداد موجودًا ، فيمكنك استخدام #حدد (في C) أو مقدار ثابت في C ++ / C # لتحديد هذه القيم. على سبيل المثال
الكثير من النت في العد!
المشكلة في ذلك هي أن هناك المزيد أحبار من الألوان. إذا البنفسج له قيمة 7 و برنامج يعين قيمة 15 لمتغير ، فمن الواضح أنه خطأ ولكن قد لا يتم اكتشافه لأن 15 قيمة صالحة ل int.
التعدادات للإنقاذ
التعداد هو نوع معرف من قبل المستخدم يتكون من مجموعة من الثوابت المسماة تسمى العدادات. سيتم رسم ألوان قوس قزح على النحو التالي:
الآن داخليًا ، سيستخدم المترجم عددًا صحيحًا للاحتفاظ بها ، وإذا لم يتم توفير قيم ، فسيكون الأحمر 0 ، والبرتقالي 1 وما إلى ذلك.
النقطة هي ذلك ألوان قوس قزح هو نوع ويمكن فقط تعيين المتغيرات الأخرى من نفس النوع لهذا. C هو أسهل من ذي قبل (أي أقل كتابة بدقة) ، لكن C ++ و C # لن يسمحان بالتعيين إلا إذا فرضتهما باستخدام الإلقاء.
أنت لست عالقة مع هذه مترجم القيم التي تم إنشاؤها ، يمكنك تعيين ثابت عدد صحيح خاص بها لها كما هو موضح هنا.
لا يعد وجود اللون الأزرق والنيلي بنفس القيمة خطأ حيث قد يتضمن العدادون مرادفات مثل القرمزي والقرمزي.
اختلافات اللغة
في C ، ال متغير يجب أن يسبق الإعلان كلمة تعداد كما في
في C ++ بالرغم من ذلك ، لا حاجة إليه ألوان قوس قزح هو نوع مميز لا يحتاج إلى بادئة نوع التعداد.
في C # يتم الوصول إلى القيم بواسطة اسم النوع كما في
ما هو الهدف من التعداد؟
يؤدي استخدام التعدادات إلى زيادة مستوى التجريد ويتيح للمبرمج التفكير فيما تعنيه القيم بدلاً من القلق بشأن كيفية تخزينها والوصول إليها. هذا يقلل من حدوث الخلل.
هنا مثال. لدينا مجموعة من اشارات المرور بثلاث لمبات أحمر, الأصفر و أخضر. في المملكة المتحدة ، يتغير تسلسل إشارات المرور في هذه المراحل الأربع.
- أحمر - توقف المرور.
- على حد سواء أحمر و الأصفر - لا تزال حركة المرور متوقفة ، ولكن الأضواء على وشك التغيير إلى اللون الأخضر.
- أخضر - حركة المرور يمكن أن تتحرك.
- الأصفر - تحذير من تغيير وشيك باللون الأحمر.
مثال لإشارات المرور
يتم التحكم في الأضواء عن طريق الكتابة إلى الأجزاء الثلاثة السفلية لبايت تحكم. يتم وضع هذه كنمط قليلا أدناه في ثنائي حيث تمثل RYG البتات الثلاثة. إذا كان R 1 ، فإن الضوء الأحمر مضاء وما إلى ذلك.
في هذه الحالة ، من السهل أن نرى أن الحالات الأربع المذكورة أعلاه تتوافق مع القيم 4 = أحمر يوم 6 = أحمر + الأصفر على حد سواء ، 1 = أخضر على و 2 = الأصفر على.
مع هذه الوظيفة
استخدام فئة بدلاً من التعدادات
في C ++ و C # سنحتاج إلى إنشاء فئة ثم الزائد عامل التشغيل | لكى يسمح OR-ing من الأنواع إشارات المرور.
باستخدام التعدادات ، نمنع حدوث مشاكل مع البتات الأخرى في بايت التحكم في المصباح. قد تكون بعض القطع الأخرى تتحكم في الاختبار الذاتي أو مفتاح "Green Lane". في هذه الحالة ، يمكن أن يؤدي الخلل الذي يسمح بتعيين هذه البتات في الاستخدام العادي إلى إحداث فوضى.
من المؤكد أننا سنخفي البتات في SetTrafficlights ()وظيفة لذلك بغض النظر عن القيمة التي يتم تمريرها ، يتم تغيير البتات الثلاثة السفلية فقط.
استنتاج
لدى Enums هذه الفوائد:
- إنها تقيّد القيم التي يمكن أن يأخذها متغير التعداد.
- يجبرونك على التفكير في جميع القيم الممكنة التي يمكن أن يأخذها التعداد.
- فهي ثابتة بدلاً من عدد ، مما يزيد من سهولة قراءة مصدر الرمز