0Pricing
Learn Rust Coding · درس

تعريف أول enum لك

أنشئ أنواعًا بسيطة معدّدة

تعريف أول enum لك درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.

What Is an Enum?

يتيح لك الـ enum (التعداد) تحديد نوع بيانات من خلال سرد قيم محتملة له، تُسمى المتغيرات (variants). ولا يمكن لقيمة هذا النوع أن تكون إلا واحدة من تلك المتغيرات.

تتألق الـ enums عندما يكون لشيء ما مجموعة ثابتة من الحالات، مثل الاتجاهات الأربعة أو أشكال أوراق اللعب.

enum Direction {
    North,
    South,
    East,
    West,
}

تعريف تعداد

تعرّف التعداد باستخدام الكلمة المفتاحية enum، ثم اسم، ثم قائمة مفصولة بفواصل من المتغيرات داخل أقواس معقوفة.

وفقًا للعرف، تستخدم أسماء التعدادات نمط PascalCase، مثل Direction، وكذلك أسماء المتغيرات، مثل North.

enum TrafficLight {
    Red,
    Yellow,
    Green,
}

إنشاء قيمة تعداد

لإنشاء قيمة، اكتب اسم التعداد، ثم علامتي النقطتين ::، ثم المتغير.

على سبيل المثال، تنشئ Direction::North قيمة من النوع Direction. وتوضّح :: للغة Rust التعداد الذي ينتمي إليه المتغير.

enum Direction {
    North,
    South,
    East,
    West,
}

fn main() {
    let heading = Direction::East;
    println!("Created a direction value!");
}

التعدادات أنواع

بعد تعريف التعداد، يصبح نوعًا حقيقيًا مثل i32 أو bool. يمكنك تخزين قيمه في متغيرات وتمريرها إلى الدوال.

ستقبل الدالة التي تأخذ Direction أيًّا من متغيراته، ولن تقبل أي شيء آخر.

enum Direction {
    North,
    South,
}

fn describe(d: Direction) {
    println!("Got a direction");
}

fn main() {
    describe(Direction::North);
}

لماذا لا نستخدم الأرقام فحسب؟

يمكنك تمثيل إشارة المرور باستخدام 0 و1 و2، لكن لا شيء يمنعك من استخدام 7 عن طريق الخطأ.

يجعل التعداد الحالات غير الصالحة مستحيلة؛ إذ يضمن المصرّف أن تكون القيمة دائمًا أحد المتغيرات المدرجة. وهذا أكثر أمانًا وأسهل بكثير في القراءة.

اشتقاق Debug للطباعة

لا تعرف Rust افتراضيًا كيفية طباعة تعداد. تتيح لك إضافة #[derive(Debug)] أعلى التعداد طباعته باستخدام منسّق {:?}.

وهذا مفيد جدًا لتصحيح الأخطاء بسرعة أثناء التعلّم.

#[derive(Debug)]
enum Direction {
    North,
    South,
}

fn main() {
    let d = Direction::South;
    println!("{:?}", d);
}

مقارنة قيم التعداد

أضف #[derive(PartialEq)] لكي تتمكن من مقارنة المتغيرات باستخدام ==.

يفيد ذلك في عمليات التحقق البسيطة، لكن تعبير match، الذي ستتعلّمه قريبًا، يكون عادةً الأداة الأفضل للسلوك الأكثر تعقيدًا.

#[derive(PartialEq)]
enum Light {
    Red,
    Green,
}

fn main() {
    let l = Light::Red;
    if l == Light::Red {
        println!("Stop!");
    }
}

السماح بعدد كبير من المتغيرات

يمكن أن يحتوي التعداد على العدد الذي تحتاج إليه من المتغيرات. وجميعها جزء من النوع نفسه.

يساعد إدراج الحالات المرتبطة معًا على تنظيم الشيفرة، ويجعل الخيارات الممكنة واضحة بنظرة سريعة.

enum Suit {
    Hearts,
    Diamonds,
    Clubs,
    Spades,
}

التعدادات في المكتبة القياسية

تستخدم المكتبة القياسية الخاصة بـ Rust التعدادات في كل مكان تقريبًا. ومن أشهرها Option (قيمة قد تكون موجودة أو غائبة) وResult (نجاح أو خطأ).

يساعدك تعلم التعدادات الآن على فهم هذه الأنواع الأساسية لاحقًا.

// Option is an enum in std:
// enum Option<T> {
//     Some(T),
//     None,
// }

نسخ التعدادات البسيطة

يمكن للتعدادات التي لا تحتوي متغيراتها على بيانات أن تشتق Clone وCopy. عندها تُنسخ القيم تلقائيًا بدلًا من نقل ملكيتها.

يجعل ذلك تعداد الحالات الصغيرة يتصرف مثل القيم البسيطة، كالأعداد الصحيحة.

#[derive(Clone, Copy)]
enum Coin {
    Heads,
    Tails,
}

fn main() {
    let a = Coin::Heads;
    let b = a; // a is still usable
}

تجميع العناصر معًا

إليك برنامجًا كاملًا: عرّف تعدادًا، وأنشئ قيمة، ثم اطبعها باستخدام Debug.

شغّله، وجرّب تغيير Green إلى متغير آخر لترى كيف يتغير الناتج.

#[derive(Debug)]
enum TrafficLight {
    Red,
    Yellow,
    Green,
}

fn main() {
    let current = TrafficLight::Green;
    println!("Light is {:?}", current);
}

تحقق سريع

اختبر فهمك لأساسيات التعدادات.

مراجعة

تعلمت أن التعداد يعرّف نوعًا من قائمة ثابتة من المتغيرات، ويُصرَّح عنه باستخدام الكلمة المفتاحية enum.

تنشئ القيم باستخدام EnumName::Variant، ويمكنك اشتقاق Debug أو PartialEq أو Copy لطباعتها ومقارنتها ونسخها. ستتعلم لاحقًا كيفية الاستجابة لكل متغير باستخدام match.

الأسئلة الشائعة

هل درس «تعريف أول enum لك» مجاني؟

نعم — نص درس «تعريف أول enum لك» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.

ماذا ستتعلم في «تعريف أول enum لك»؟

أنشئ أنواعًا بسيطة معدّدة تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟

لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «تعريف أول enum لك»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟

نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تعريف أول enum لك
  2. مطابقة متغيرات enum
  3. Enums مع البيانات
  4. حراس match والربط
← العودة إلى Learn Rust Coding