جاري التحميل...

التعدادات (Enums)

تُعد التعدادات (Enums) في سي شارب أداة قوية لتمثيل مجموعة من القيم الثابتة بطريقة منظمة وواضحة داخل البرنامج. فهي تسهل على المطورين التعامل مع القيم المتكررة والمحددة مسبقاً مثل أيام الأسبوع، حالة الطلبات، مستويات الوصول، أو أنواع الرسائل، بدلاً من استخدام الأعداد أو السلاسل النصية العشوائية، مما يقلل من احتمالية الأخطاء ويحسن وضوح الكود وصيانته. يُستخدم Enum لتعريف نوع بيانات جديد يحتوي على مجموعة ثابتة من القيم التي يمكن أن تمثل خصائص معينة أو حالات منطقية في التطبيق.
في سي شارب، يُكتب التعداد باستخدام كلمة enum تليها اسم التعداد، ثم مجموعة القيم بين أقواس معقوفة. يمكن للتعدادات أن ترتبط مباشرة بالأنواع الرقمية مثل int أو byte، مما يسمح بتخصيص قيم محددة لكل عنصر عند الحاجة. يُعتبر Enum جزءاً من مبادئ البرمجة الكائنية في سي شارب، حيث يمكن استخدامه داخل الأصناف، الواجهات، وحتى مع الخصائص والحقول لتعزيز تنظيم البيانات.
عند تعلم التعدادات في سي شارب، سوف تتعرف على كيفية تعريفها، تهيئتها، استخدامها داخل الشروط والحلقات، والتحويل بينها وبين الأنواع الرقمية والنصية، وكذلك دمجها مع الهياكل والصفوف لتطوير برامج أكثر قابلية للقراءة والصيانة. كما سنتناول كيفية تطبيق التعدادات ضمن تصميم الأنظمة الكبيرة، مع التركيز على الكفاءة والأمان والأداء ضمن هندسة البرمجيات.

مثال أساسي

text
TEXT Code
using System;

namespace EnumExample
{
class Program
{
// تعريف تعداد يمثل أيام الأسبوع
enum DaysOfWeek
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}

static void Main(string[] args)
{
// استخدام التعداد
DaysOfWeek today = DaysOfWeek.Wednesday;

Console.WriteLine("اليوم الحالي: " + today);

// مقارنة القيم
if (today == DaysOfWeek.Wednesday)
{
Console.WriteLine("نحن في منتصف الأسبوع!");
}

// تحويل التعداد إلى عدد صحيح
int dayNumber = (int)today;
Console.WriteLine("رقم اليوم في الأسبوع: " + dayNumber);

// تحويل العدد الصحيح إلى تعداد
DaysOfWeek anotherDay = (DaysOfWeek)5;
Console.WriteLine("اليوم رقم 5: " + anotherDay);
}
}

}

في هذا المثال، قمنا بتعريف تعداد باسم DaysOfWeek يحتوي على قيم ثابتة تمثل أيام الأسبوع من Sunday إلى Saturday. تم استخدام التعداد داخل الدالة Main لتخزين اليوم الحالي ومقارنته بقيمة محددة باستخدام شرط if. يُظهر التحويل من التعداد إلى عدد صحيح كيفية استخدام Enum في العمليات الحسابية أو الحلقات، بينما يُبرز التحويل من عدد صحيح إلى تعداد مرونة Enum في استقبال البيانات من مصادر مختلفة مثل قواعد البيانات أو واجهات المستخدم.
لاحظ أن التعداد يوفر وضوحاً كبيراً في الكود مقارنة باستخدام أعداد صحيحة مباشرة أو نصوص لتحديد الأيام، مما يقلل من الأخطاء ويحسن الصيانة. كما يتيح التعداد تنفيذ منطق برمجي يعتمد على قيم ثابتة بطريقة منظمة، وهو أمر مفيد عند بناء تطبيقات معقدة مثل أنظمة إدارة الطلبات أو تتبع الحالات في البرمجيات المؤسسية. علاوة على ذلك، Enum في سي شارب يدعم الربط مع الهياكل والصفوف، ويمكن دمجه مع خصائص وواجهات لتطبيق مبادئ البرمجة الكائنية بشكل فعّال، ويشمل ذلك إمكانية استخدامه في الحلقات، الشروط، والمصفوفات مما يعزز الكفاءة والأداء في المشاريع الكبيرة.

مثال عملي

text
TEXT Code
using System;

namespace AdvancedEnumExample
{
// تعداد يمثل حالة الطلب مع تعيين قيم محددة
enum OrderStatus : byte
{
Pending = 1,
Processing = 2,
Shipped = 3,
Delivered = 4,
Cancelled = 5
}

class Order
{
public int Id { get; set; }
public string Customer { get; set; }
public OrderStatus Status { get; set; }

public void PrintStatus()
{
switch (Status)
{
case OrderStatus.Pending:
Console.WriteLine("الطلب قيد الانتظار.");
break;
case OrderStatus.Processing:
Console.WriteLine("الطلب قيد المعالجة.");
break;
case OrderStatus.Shipped:
Console.WriteLine("تم شحن الطلب.");
break;
case OrderStatus.Delivered:
Console.WriteLine("تم توصيل الطلب.");
break;
case OrderStatus.Cancelled:
Console.WriteLine("تم إلغاء الطلب.");
break;
default:
Console.WriteLine("حالة غير معروفة.");
break;
}
}
}

class Program
{
static void Main(string[] args)
{
Order order1 = new Order { Id = 101, Customer = "أحمد", Status = OrderStatus.Processing };
Order order2 = new Order { Id = 102, Customer = "ليلى", Status = OrderStatus.Shipped };

order1.PrintStatus();
order2.PrintStatus();
}
}

}

في المثال العملي، قمنا بتوسيع استخدام التعداد ليشمل حالة الطلبات ضمن تطبيق واقعي. تم تعريف تعداد OrderStatus بقيم رقمية محددة باستخدام نوع البيانات byte لتقليل استهلاك الذاكرة، وهو مثال على تحسين الأداء في سي شارب. بعد ذلك، تم إنشاء صف Order يحتوي على خصائص أساسية مثل رقم الطلب واسم العميل وحالة الطلب باستخدام التعداد.
تُستخدم عبارة switch لتطبيق المنطق بناءً على قيمة التعداد، مما يوضح كيف يمكن استخدام Enum لإدارة الحالات المختلفة بطريقة نظيفة وقابلة للتوسيع. هذه الطريقة أفضل من استخدام السلاسل النصية أو الأعداد العشوائية لأنها تقلل الأخطاء وتزيد من وضوح الكود. كما يظهر المثال كيفية دمج التعداد مع الصفوف والمصفوفات، وتطبيق أفضل الممارسات في سي شارب مثل تحديد نوع البيانات الصغير، استخدام switch للتحكم في التدفق، والتأكد من التعامل مع القيم الافتراضية لتجنب الحالات غير المتوقعة.

Code Example 7

جدول مرجعي
جدول مرجعي Code
سي شارب Element/Concept|Description|Usage Example
enum|تعريف تعداد يحتوي على مجموعة ثابتة من القيم|enum Days {Sunday, Monday, Tuesday}
Casting|تحويل التعداد إلى عدد صحيح والعكس|int dayNum = (int)Days.Monday; Days day = (Days)1;
Underlying Type|تحديد نوع البيانات الأساسي للتعداد لتوفير الذاكرة|enum Status : byte {Active = 1, Inactive = 0}
Switch Statement|استخدام التعداد ضمن شرط switch للتحكم بالمنطق|switch(status){ case Status.Active: ... break;}
Integration with Classes|دمج التعداد داخل الصفوف لتحديد خصائص محددة|class Order { public OrderStatus Status {get; set;} }

أفضل الممارسات في سي شارب عند استخدام التعدادات تشمل تعريف قيم واضحة ومحددة، استخدام النوع الأساسي المناسب لتوفير الذاكرة، وتجنب استخدام القيم الافتراضية غير المعروفة التي قد تسبب أخطاء في التطبيق. يُنصح دائماً بالتحقق من صحة القيم عند التحويل بين التعدادات والأنواع الرقمية لتجنب الاستثناءات.
من الأخطاء الشائعة استخدام السلاسل النصية أو الأعداد العشوائية بدلاً من التعدادات، مما يؤدي إلى كود أقل وضوحاً وأكثر عرضة للأخطاء. كما يجب الحذر من سوء التعامل مع switch وعدم تغطية جميع القيم الممكنة، وكذلك التأكد من أن التعدادات لا تُستخدم بطريقة تسبب تسربات للذاكرة عند دمجها مع هياكل البيانات الكبيرة أو العمليات الحسابية المكثفة.
من ناحية الأداء، يُفضل اختيار النوع الأساسي الصغير مثل byte أو short إذا كان العدد المحتمل للقيم محدوداً. كما يساهم استخدام التعدادات في تحسين الأمان، حيث تمنع إدخال قيم غير صالحة للحالات المختلفة، مما يجعل التطبيقات أكثر موثوقية. يمكن أيضاً استخدام Enum.Parse وEnum.TryParse للتعامل مع التحويلات النصية بطريقة آمنة، وهو أمر شائع عند استلام البيانات من واجهات المستخدم أو قواعد البيانات.

خلاصة وخطوات مقبلة في سي شارب:
تُعد التعدادات (Enums) أداة أساسية في سي شارب لتمثيل القيم الثابتة بطريقة منظمة وآمنة، مع تحسين وضوح الكود وصيانته. من خلال تعلم كيفية تعريفها، تحويلها، ودمجها مع الصفوف والهياكل، يمكن للمطورين إدارة الحالات المختلفة بشكل فعّال في التطبيقات الحقيقية مثل إدارة الطلبات أو تتبع الأحداث.
بعد فهم التعدادات، يُنصح بالانتقال إلى دراسة السمات (Attributes) في سي شارب لتخصيص السلوكيات، والتعامل مع القيم النصية داخل التعدادات، ودراسة الأنماط التصميمية مثل State Pattern التي تعتمد على إدارة الحالات باستخدام Enum. التطبيق العملي للتعدادات ضمن المشاريع الكبيرة يعزز كفاءة الأداء ويقلل الأخطاء المنطقية، مع إمكانية تحسين قابلية توسعة البرامج المستقبلية. يمكن متابعة المصادر الرسمية مثل موقع مايكروسوفت للتوثيق، وكتب متقدمة في البرمجة الكائنية في سي شارب لتعميق الفهم واكتساب مهارات أكثر تقدماً.

🧠 اختبر معرفتك

جاهز للبدء

اختبر معرفتك

اختبر فهمك لهذا الموضوع بأسئلة عملية.

4
الأسئلة
🎯
70%
للنجاح
♾️
الوقت
🔄
المحاولات

📝 التعليمات

  • اقرأ كل سؤال بعناية
  • اختر أفضل إجابة لكل سؤال
  • يمكنك إعادة الاختبار عدة مرات كما تريد
  • سيتم عرض تقدمك في الأعلى