الـ Enums في جمل 'switch'
جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 61 من 65.
أحد أقوى تطبيقات الـ enums هو استخدامها مع جمل switch. فعندما تجمع بين الـ enums وجمل switch، فإنك تنشئ كوداً أكثر أماناً وأسهل في الصيانة.
إليك كيفية استخدام enum في جملة switch:
enum Status {
pending,
running,
completed
}
Status currentStatus = Status.pending;
switch (currentStatus) {
case Status.pending:
print('Task is waiting to start');
break;
case Status.running:
print('Task is currently in progress');
break;
case Status.completed:
print('Task has been finished');
break;
}تكمن روعة استخدام enums مع جمل switch في أن Dart يمكنها التحقق من أنك قمت بمعالجة جميع قيم enum الممكنة. إذا نسيت تضمين case لإحدى قيم enum، فستقوم Dart بتحذيرك، مما يساعد في منع الأخطاء البرمجية في كودك.
هذا النهج أكثر أماناً بكثير من استخدام السلاسل النصية أو الأرقام في جمل switch، حيث يمكن أن تتسبب الأخطاء المطبعية في سلوك غير متوقع. فباستخدام التعدادات (enums)، تحصل على فحص في وقت التجميع (compile-time checking) يضمن أن الكود الخاص بك يتعامل مع كل سيناريو محتمل.
التحدي
سهلقم بإنشاء برنامج يدير حالة شخصية في لعبة باستخدام التعدادات (enums) وجمل switch. مهمتك هي:
- تعريف enum يسمى
CharacterStateبالقيم التالية:idle، وwalking، وrunning، وjumping، وattacking - إنشاء متغير يسمى
currentStateمن نوعCharacterStateوتعيين القيمةCharacterState.idleله - إنشاء دالة تسمى
getStateMessageتأخذ معاملًا من نوعCharacterStateوتعيد رسالة نصية بناءً على الحالة باستخدام جملة switch: - للحالة
CharacterState.idle: تعيد"Character is standing still" - للحالة
CharacterState.walking: تعيد"Character is moving slowly" - للحالة
CharacterState.running: تعيد"Character is moving quickly" - للحالة
CharacterState.jumping: تعيد"Character is in the air" - للحالة
CharacterState.attacking: تعيد"Character is fighting" - طباعة رسالة الحالة الأولية باستخدام الدالة بالتنسيق الدقيق:
Initial state: Character is standing still - تغيير
currentStateإلىCharacterState.walking - طباعة رسالة الحالة المحدثة بالتنسيق الدقيق:
Updated state: Character is moving slowly - تغيير
currentStateإلىCharacterState.attacking - طباعة رسالة الحالة النهائية بالتنسيق الدقيق:
Final state: Character is fighting
يجب أن يوضح برنامجك الاستخدام الصحيح للتعدادات (enums) مع جمل switch، مبيناً كيف يوفر هذا المزيج إدارة حالة آمنة من حيث النوع (type-safe). يجب أن تتعامل جملة switch مع جميع قيم التعداد وتعيد الرسالة المناسبة لكل حالة من حالات الشخصية. تأكد من اتباع قواعد التسمية في لغة Dart واستخدام الرسائل النصية المحددة أعلاه تماماً.
ورقة مرجعية
تعمل التعدادات (Enums) بشكل جيد مع جمل switch للحصول على كود آمن من حيث النوع (type-safe):
enum Status {
pending,
running,
completed
}
Status currentStatus = Status.pending;
switch (currentStatus) {
case Status.pending:
print('Task is waiting to start');
break;
case Status.running:
print('Task is currently in progress');
break;
case Status.completed:
print('Task has been finished');
break;
}تتحقق Dart من أن جميع قيم التعداد (enum) قد تمت معالجتها في جملة switch، مما يمنع الأخطاء ويوفر فحصاً أثناء وقت التجميع (compile-time checking).
جرّب بنفسك
import 'dart:io';
// TODO: قم بتعريف CharacterState enum هنا
// TODO: قم بإنشاء دالة getStateMessage هنا
void main() {
// TODO: اكتب الكود الخاص بك أدناه
// قم بإنشاء متغير currentState وقم بتعيينه إلى CharacterState.idle
// اطبع رسالة الحالة الأولية
// قم بتغيير currentState إلى CharacterState.walking
// اطبع رسالة الحالة المحدثة
// قم بتغيير currentState إلى CharacterState.attacking
// اطبع رسالة الحالة النهائية
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1التعامل المتقدم مع القوائم
خصائص القائمة: first و lastحالة القائمة: isEmpty و isNotEmptyعكس القائمةالإضافة إلى القائمة: insertالحذف من القائمة: removeWhereالبحث في القائمة: indexOfفرز القائمةخلط القائمةملخص - منظم القوائم4معالجة الـ Map المتقدمة
التكرار عبر الـ Mapالتحقق من المفاتيح والقيمخصائص الـ Map: keys و valuesإضافة مشروطة: putIfAbsentإزالة العناصر من الـ Mapالـ Maps المتداخلةمراجعة - تحديث المخزون2عمليات القوائم الوظيفية
التحويل باستخدام 'map'التصفية باستخدام 'where'استخدام '.toList()'التحقق من الشروط باستخدام 'any'الشروط باستخدام 'every'البحث باستخدام 'firstWhere'مراجعة - تصفية البيانات5مشروع: حاسبة عربة التسوق
إعداد المشروعإضافة العناصر إلى العربة3المجموعات
ما هي المجموعة؟إنشاء مجموعةالإضافة والحذف من المجموعاتالتحقق من وجود عناصر في المجموعةتحويل قائمة إلى مجموعةاتحاد المجموعاتتقاطع المجموعاتالفرق بين المجموعاتمراجعة - قائمة ضيوف فريدة6أساسيات معالجة الأخطاء
ما هي الاستثناءات؟كتلة 'try-catch'التقاط الاستثناءات باستخدام 'on'كتلة 'finally'رمي استثناءملخص - القسمة الآمنة9التعدادات (Enums)
ما هي الـ Enums؟تعريف Enum بسيطاستخدام الـ Enums في المتغيراتالـ Enums في جمل 'switch'مراجعة - إشارة المرور