تخطَّ إلى المحتوى

enum

التعدادات enum

enum يعرّف نوعًا بمجموعة متغيّرات محدودة، وقد يحمل كل متغيّر بياناته الخاصة — أقوى بكثير من تعدادات اللغات الأخرى.

خلافًا لتعدادات C أو Java البسيطة، متغيّرات enum في Rust يمكن أن تحمل بيانات مختلفة الشكل: بدون بيانات، أو صفّ قيم، أو حقول مسمّاة كأنها هيكل مصغّر. هذا يجعل enum أداة قوية لتمثيل «قيمة من بين عدّة أشكال ممكنة» بأمان كامل وقت الترجمة.

Option و Result من المكتبة القياسية أمثلة شهيرة على enum يحمل بيانات: Option<T> تمثّل وجود قيمة أو غيابها، وResult<T, E> تمثّل نجاحًا أو فشلًا.

الصياغة

enum Name {
    Variant1,
    Variant2(Type),
    Variant3 { field: Type },
}

📄 مثال

enum Shape {
    Circle(f64),
    Rectangle(f64, f64),
    Point,
}

let s = Shape::Circle(2.0);

let area = match s {
    Shape::Circle(r) => 3.14 * r * r,
    Shape::Rectangle(w, h) => w * h,
    Shape::Point => 0.0,
};

أهم النقاط

العنصرالوظيفة
Variantمتغيّر بدون بيانات إضافية
Variant(T, T)متغيّر يحمل قيمًا بلا أسماء (شبيه tuple)
Variant { f: T }متغيّر يحمل حقولًا مسمّاة
Enum::Variantالوصول لمتغيّر عبر اسم النوع

💡 نصائح عملية

  • استخدم enum بدل عدّة متغيّرات bool منفصلة لتمثيل حالة واحدة من بين خيارات متعدّدة
  • اجمع بيانات كل حالة داخل متغيّرها مباشرة بدل هياكل منفصلة متفرّقة

⚠️ أخطاء شائعة

  • الظن أن enum في Rust مجرّد أرقام صحيحة مسمّاة كما في C — هي أقوى بكثير وتحمل بيانات
  • نسيان تغطية كل المتغيّرات داخل match — المترجم يرفض المطابقة غير الشاملة

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار RUST الكامل بالعربي.