التعدادات للأنواع المخصّصة
استخدموا التعدادات لتعريف أنواع يمكن أن تكون أحد عدة متغيرات، وغالبًا ما تحمل بيانات مرتبطة.
التعدادات للأنواع المخصّصة درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 2 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 3 دروس في المجموع.
التعدادات: خيارات الأنواع المخصّصة
مرحبًا بكم في التعدادات للأنواع المخصّصة! تتيح لكم التعدادات في Rust تعريف نوع يمكن أن يكون واحدًا من عدة متغيرات متميزة وممكنة.
فكّروا في التعداد على أنه طريقة للقول: "يمكن أن يكون هذا العنصر A، أو B، أو C." وهو مفيد جدًا لتمثيل الحالات أو الخيارات المختلفة.
تعريف تعداد بسيط
لتعريف تعداد، تستخدمون الكلمة المفتاحية enum متبوعة باسمه وأقواس معقوفة تحتوي على متغيراته. ويمثل كل متغير خيارًا متميزًا.
إليكم مثالًا بسيطًا على الاتجاهات الأساسية:
enum Direction {
North,
South,
East,
West,
}
fn main() {
let my_direction = Direction::North;
println!("My direction is {:?}", my_direction);
}التعدادات مع البيانات المرتبطة
على خلاف المتغيرات البسيطة، يمكن لمتغيرات التعداد أن تحتوي أيضًا على بيانات! وهذا يجعل التعدادات قوية جدًا، إذ يمكن لكل متغير حمل مجموعة معلومات متميزة خاصة به.
يمكن أن تكون البيانات صفًا (مثل (i32, String)) أو بنية (مثل { x: i32, y: i32 }).
البيانات المرتبطة قيد الاستخدام
لنرَ تعدادًا يمثل فيه كل متغير نوعًا مختلفًا من الرسائل، حيث يحمل بعضها بيانات ولا يحمل بعضها الآخر.
لاحظوا أن Move يستخدم بنية، وWrite يستخدم String، وChangeColor يستخدم صفًا.
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
fn main() {
let m1 = Message::Quit;
let m2 = Message::Move { x: 10, y: 20 };
let m3 = Message::Write(String::from("hello"));
let m4 = Message::ChangeColor(255, 0, 128);
// We can't directly print enums with associated data using {:?}
// without deriving Debug, which we'll cover later.
// For now, just know these instances are created.
println!("Messages created!");
}تعداد `Option`: التعامل مع غياب القيمة
يُعد Option<T> أحد أكثر تعدادات Rust أساسية. ويُستخدم لتمثيل القيم التي قد تكون موجودة أو غير موجودة، مما يمنع أخطاء مؤشرات null الشائعة في اللغات الأخرى.
Some(T): المتغير الذي يحتوي على قيمة من النوعT.None: المتغير الذي يمثل عدم وجود قيمة.
استخدام `Option<T>` بفاعلية
يفرض Option<T> عليكم معالجة حالتي Some وNone صراحةً، مما يجعل تعليماتكم البرمجية أكثر أمانًا ومتانة. لا مزيد من أعطال null غير المتوقعة!
إليكم طريقة استخدامه:
fn find_item(id: i32) -> Option<String> {
if id == 7 {
Some(String::from("Found item 7!"))
} else {
None
}
}
fn main() {
let item1 = find_item(7);
let item2 = find_item(5);
println!("Item 1: {:?}", item1);
println!("Item 2: {:?}", item2);
}باختصار: تعداد `Result`
تعداد حيوي آخر هو Result<T, E>، ويُستخدم لمعالجة الأخطاء. وله متغيران:
Ok(T): يشير إلى النجاح ويحتوي على القيمة الناتجة بنجاح.Err(E): يشير إلى الفشل ويحتوي على قيمة الخطأ.
سنتناول Result بالتفصيل في درس لاحق، لكن من المفيد معرفة أنه نمط تعداد قوي آخر!
الدوال في التعدادات
كما هو الحال مع البُنى، يمكنكم تعريف دوال للتعدادات باستخدام كتلة impl. ويمكن لهذه الدوال تنفيذ إجراءات أو إرجاع قيم استنادًا إلى متغير التعداد.
لنضف دالة call إلى تعداد Message السابق:
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
impl Message {
fn call(&self) {
println!("A message was called!");
}
}
fn main() {
let m = Message::Write(String::from("hello"));
m.call();
}تحقق سريع من التعدادات
أي العبارات التالية صحيحة بشأن تعداد Rust؟
مراجعة: التعدادات للأنواع المخصّصة
أحسنتم! لقد تعلّمتم كيف توفر تعداديات Rust طريقة قوية لتعريف أنواع مخصّصة يمكن أن تكون واحدة من عدة متغيرات.
- تتيح لكم التعدادات نمذجة الخيارات والحالات بوضوح.
- يمكن للمتغيرات حمل بيانات مرتبطة، مما يجعلها مرنة للغاية.
- يُعد تعداد
Option<T>أساسيًا للتعامل مع غياب قيمة بأمان. - يمكن أن تحتوي التعدادات على دوال معرّفة باستخدام كتل
impl.
سنستكشف بعد ذلك كيفية التعامل مع متغيرات التعداد هذه باستخدام مطابقة الأنماط القوية!
تعلم Rust مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 39
- الدروس
- 144
الأسئلة الشائعة
هل درس «التعدادات للأنواع المخصّصة» مجاني؟
نعم — نص درس «التعدادات للأنواع المخصّصة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 3 دروس في المجموع.
ماذا ستتعلم في «التعدادات للأنواع المخصّصة»؟
استخدموا التعدادات لتعريف أنواع يمكن أن تكون أحد عدة متغيرات، وغالبًا ما تحمل بيانات مرتبطة. تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟
لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 3.
كم من الوقت يستغرق درس «التعدادات للأنواع المخصّصة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟
نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تعريف البنى واستخدامها
- التعدادات للأنواع المخصّصة
- مطابقة الأنماط القوية