🚀 اكتشف قوة الـ Enums في TypeScript: تنظيم البيانات باحترافية
اليوم سنتحدث عن ميزة رائعة جداً في لغة TypeScript تُسمى Enums (وهي اختصار لكلمة Enumerations).
هل سبق وأن وجدت نفسك تكتب نفس القيم النصية أو الرقمية بشكل متكرر في الكود؟ مثل حالات الطلب (قيد المعالجة، تم الشحن، تم التوصيل)؟ بدلاً من كتابة هذه الكلمات يدوياً في كل مرة والمخاطرة بالوقوع في أخطاء إملائية، يأتي هنا دور الـ Enums.
🧐 ما هي الـ Enums بالضبط؟
الـ Enum هي وسيلة تسمح لك بتعريف مجموعة من "الثوابت ذات الأسماء". تخيلها كأنها قائمة مغلقة من الخيارات التي لا يمكن للخروج عنها. هي ببساطة طريقة لقول: "هذا المتغير يمكن أن يكون واحداً من هذه الخيارات المحددة فقط".
لماذا نستخدمها؟
- منع الأخطاء: بدلاً من كتابة
"Pending"في مكان و"pending"(بحرف صغير) في مكان آخر، نستخدم اسماً واحداً ثابتاً. - سهولة القراءة: الكود يصبح مفهوماً أكثر لأي مبرمج يقرأه.
- سهولة التعديل: إذا أردت تغيير قيمة معينة، تغيرها في مكان واحد فقط (داخل الـ Enum) بدلاً من البحث عنها في كل ملفات المشروع.
🛠️ كيف ننشئ Enum بسيطة؟ (Numeric Enums)
بشكل افتراضي، عندما تنشئ Enum في TypeScript، فإنها تبدأ بإعطاء القيم أرقاماً تبدأ من الصفر (0) بشكل تلقائي.
لنلقِ نظرة على هذا المثال البسيط لتمثيل أيام الأسبوع:
// تعريف Enum لأيام الأسبوع
enum Day {
Sunday, // ستأخذ القيمة 0
Monday, // ستأخذ القيمة 1
Tuesday, // ستأخذ القيمة 2
Wednesday, // ستأخذ القيمة 3
Thursday, // ستأخذ القيمة 4
Friday, // ستأخذ القيمة 5
Saturday // ستأخذ القيمة 6
}
// استخدام الـ Enum في متغير
let today: Day = Day.Monday;
console.log(today); // المخرج سيكون: 1
لاحظ ماذا حدث هنا:
- قمنا بتعريف
enum Day. - TypeScript قام تلقائياً بتعيين الرقم
0لـSundayو1لـMondayوهكذا. - عندما استدعينا
Day.Mondayحصلنا على القيمة الرقمية1.
🔢 التحكم في القيم الرقمية
إذا كنت لا تريد البدء من الصفر، يمكنك تحديد قيمة البداية يدوياً، وسيقوم TypeScript بإكمال البقية بالتسلسل.
// تخصيص قيمة البداية لتكون 1 بدلاً من 0
enum Status {
Active = 1, // القيمة 1
Inactive, // ستصبح 2 تلقائياً
Pending, // ستصبح 3 تلقائياً
Deleted // ستصبح 4 تلقائياً
}
let userStatus: Status = Status.Pending;
console.log(userStatus); // المخرج سيكون: 3
🔤 الـ String Enums (التعدادات النصية)
في كثير من الأحيان، لا نحتاج إلى أرقام، بل نريد أن تكون القيمة عبارة عن "نص" واضح. هنا نستخدم ما يسمى بالـ String Enums. في هذا النوع، يجب علينا تحديد قيمة كل عنصر يدوياً.
هذا النوع هو الأكثر استخداماً في المشاريع الواقعية لأنه يجعل عملية تتبع الأخطاء (Debugging) أسهل بكثير.
// تعريف Enum بنصوص واضحة
enum OrderStatus {
Processing = "PROCESSING",
Shipped = "SHIPPED",
Delivered = "DELIVERED",
Cancelled = "CANCELLED"
}
// استخدام الـ Enum
let currentOrder: OrderStatus = OrderStatus.Shipped;
if (currentOrder === OrderStatus.Shipped) {
console.log("Your order is on the way!"); // المخرج: Your order is on the way!
}
console.log(currentOrder); // المخرج سيكون: SHIPPED
لماذا هذا المثال أفضل؟
لو طبعنا القيمة في الـ Console، سنرى كلمة "SHIPPED" بدلاً من رقم مثل 1 أو 2 الذي قد لا يعني لنا شيئاً بدون العودة للكود.
💡 ملخص سريع للفرق بين الأنواع
| الميزة | Numeric Enum 🔢 | String Enum 🔤 |
|---|---|---|
| القيم الافتراضية | تبدأ من 0 تلقائياً | يجب تحديدها يدوياً |
| نوع القيمة | أرقام (Number) | نصوص (String) |
| الوضوح | أقل وضوحاً عند الطباعة | واضحة جداً عند الطباعة |
| الاستخدام | للحالات البسيطة جداً | للمشاريع والبيانات الواقعية |
⏭️ ماذا سنتعلم في الدرس القادم؟
الآن بعد أن تعلمنا كيف نحدد مجموعات من القيم الثابتة باستخدام الـ Enums، سننتقل في الدرس القادم إلى موضوع حيوي جداً وهو "TypeScript Interfaces".
سنتعلم كيف نحدد "شكل" الكائنات (Objects) في الكود الخاص بنا لضمان عدم نسيان أي خاصية مهمة، وكيف نجعل الكود أكثر تنظيماً واحترافية. انتظرونا! 🚀
🎓 اختبر معلوماتك
التعليقات
شاركنا رأيك أو أسئلتك حول هذا المقال