يعد فهم التعدادات ومطابقة الأنماط أمرًا أساسيًا في Rust. اكتشف التقنيات الفعالة لتنفيذ كلاهما.

يوفر Rust أنواعًا مختلفة من البيانات لإجراء العمليات ، بدءًا من أنواع البيانات الأساسية مثل السلاسل والأعداد الصحيحة والعائمة تشير الأرقام إلى أنواع البيانات المركبة مثل المتجهات والمصفوفات إلى أنواع البيانات المركبة مثل الهياكل والتعدادات.

التعداد (التعداد) هو نوع بيانات يسمح بتمثيل مجموعة ثابتة من القيم ، مثل أيام الأسبوع ولون قوس قزح. تكون التعدادات في المتناول عندما تكون القيم المحتملة للمتغير محدودة ومعروفة.

تحديد Enums في الصدأ

إعلان التعداد في Rust مشابه لـ إعلان التعداد في C #. ستستخدم ملف تعداد الكلمة الأساسية بعد الاسم ومجموعة من الأقواس المتعرجة لتعريف التعداد. يمكنك تحديد المتغيرات (الكيانات) الممكنة داخل الأقواس المتعرجة بفاصلة كفاصل.

إليك تعداد أيام الأسبوع:

تعداديوم من أيام الأسبوع {
الاثنين،
يوم الثلاثاء،
الأربعاء،
يوم الخميس،
جمعة،
السبت،
الأحد،
}

ال يوم من أيام الأسبوع يمثل enum أيام الأسبوع. ال المتغيرات هي أسماء اليوم وليس لها قيم مرتبطة. أيضًا ، يمكن أن تكون متغيرات التعداد الخاص بك أيًا نوع بيانات الصدأ.

instagram viewer

يمكنك الوصول إلى المتغيرات من خلال تحديد اسم المتغير باستخدام فاصل المسار (: :) عامل في التعداد.

يترك اليوم = يوم من أيام الأسبوع:: الاثنين ؛

// نسخة مكتوبة بشكل ثابت من متغير "اليوم"
يترك اليوم: يوم من أيام الأسبوع = يوم من أيام الأسبوع:: يوم الاثنين ؛

يحدد الرمز أنك تريد الوصول إلى ملف الاثنين متغير من تعداد أيام الأسبوع.

المتغيرات والمميزات في Enums

متغيرات التعداد مرتبطة بقيم صحيحة تسمى مميز. بشكل افتراضي ، تبدأ القيم المميزة عند الصفر وتزداد بمقدار 1 للمتغيرات اللاحقة ؛ ومع ذلك ، من الممكن تحديد قيم مميزة مخصصة لكل متغير.

فيما يلي مثال على تعداد أيام الأسبوع مع المتغيرات المعينة للقيمة.

تعداديوم من أيام الأسبوع {
الاثنين = 1,
الثلاثاء = 2,
الأربعاء = 3,
الخميس = 4,
الجمعة = 5,
السبت = 6,
الأحد = 7,
}

يحتوي تعداد أيام الأسبوع على سبعة متغيرات تمثل كل يوم من أيام الأسبوع ، وكل يوم له قيمة (تسمى المميز) مخصصة لهم. المتغيرات بالترتيب من أول يوم إلى آخر يوم في الأسبوع.

يمكنك الوصول إلى القيمة المميزة باستخدام اسم المتغير.

الجبهة الوطنيةرئيسي() {
println!("الاثنين: {}"، يوم من أيام الأسبوع:: الاثنين مثلi32);
println!("يوم الثلاثاء: {}"، يوم من أيام الأسبوع:: الثلاثاء مثلi32);
println!("الأربعاء: {}"، يوم من أيام الأسبوع:: الأربعاء مثلi32);
println!("يوم الخميس: {}"، يوم من أيام الأسبوع:: الخميس مثلi32);
println!("جمعة: {}"، يوم من أيام الأسبوع:: الجمعة مثلi32);
println!("السبت: {}"، يوم من أيام الأسبوع:: السبت مثلi32);
println!("الأحد: {}"، يوم من أيام الأسبوع:: الأحد مثلi32);
}

ال println! يتم استخدام الماكرو لطباعة المميزات. كل println! يأخذ استدعاء الماكرو وسيطتين: سلسلة تنسيق وقيمة. تحدد سلسلة التنسيق كيفية تنسيق الإخراج ؛ القيمة هي القيمة الفعلية التي تتم طباعتها.

في هذه الحالة ، تكون سلسلة التنسيق عبارة عن سلسلة حرفية تحتوي على اسم يوم من أيام الأسبوع ، والقيمة هي متغير التعداد مع تحويل صريح إلى i32 نوع عدد صحيح.

يُعد الإرسال الصريح إلى i32 ضروريًا لأن تعداد Rust يتم تمثيله كأعداد صحيحة ، لكن نوع العدد الصحيح المحدد يعتمد على حجم التعداد. بشكل افتراضي ، يقوم Rust بتعيين أصغر نوع عدد صحيح يمكن أن يمثل كل المميزات في التعداد. لكن في هذه الحالة ، تريد طباعة القيم كأعداد صحيحة i32 ، لذلك تحتاج إلى طرحها بشكل صريح.

ها هي نتيجة تشغيل ملف رئيسي وظيفة:

أنماط مطابقة في الصدأ

مطابقة الأنماط هي بنية هيكل للتحكم في الصدأ مفيدة لتحديد أنماط البيانات. تتيح مطابقة النمط كتابة تعليمات برمجية موجزة وفعالة أثناء العمل باستخدام هياكل البيانات المتقدمة أو إجراء عمليات معقدة.

ستستخدم ملف مباراة الكلمة الأساسية متبوعة بالملحق => فاصل للنمط وعملية النمط ، على التوالي. يمكن أن يكون النمط أي تعبير Rust ، بما في ذلك القيم الحرفية والمتغيرات واستدعاءات الوظائف.

إليك مثال على بيان مطابقة:

الجبهة الوطنيةرئيسي(){
يترك س = 5;
مباراة x {
1 => println!("واحد"),
2 => println!("اثنين"),
3 => println!("ثلاثة"),

// يعمل إذا لم يتطابق أي من الأنماط
_ => println!("شيء آخر"),
}
}

ال رئيسي مباريات وظيفة x مقابل عدة أنماط ثم طباعة القيمة بناءً على قيمة x. نمط الشرطة السفلية (_) هو نمط حرف بدل يُستخدم كملف شامل للحالات التي لا يتم التعامل معها بشكل صريح.

الأعداد ومطابقة الأنماط

تعد التعدادات ومطابقة الأنماط مفيدة للتعبير عن هياكل البيانات المتقدمة والعمل معها بطريقة آمنة وفعالة. يمكنك استخدام التعدادات لتحديد مجموعة ثابتة من القيم ومطابقة الأنماط للعمل مع تلك القيم.

إليك تعداد للألوان في قوس قزح:

تعدادقوس المطر {
أحمر،
البرتقالي،
أصفر،
أخضر،
أزرق،
نيلي ،
البنفسجي،
}

كل متغير من قوس المطر يمثل التعداد لون قوس قزح. يمكنك استخدام مطابقة النمط مع بيان المطابقة لمطابقة الأنماط مع المتغير للتحكم في تدفق البرنامج بناءً على لون قوس قزح.

إليك وظيفة تأخذ متغير اللون من تعداد قوس قزح وتطبع رسالة بناءً على اللون.

الجبهة الوطنيةprint_color(اللون: قوس قزح) {
مباراة لون {
قوس قزح:: أحمر => println!("اللون أحمر!"),
قوس قزح:: برتقالي => println!("اللون برتقالي!"),
قوس قزح:: أصفر => println!("اللون أصفر!"),
قوس قزح:: أخضر => println!("اللون أخضر!"),
قوس قزح:: أزرق => println!("اللون أزرق!"),
قوس قزح:: نيلي => println!("اللون نيلي!"),
قوس قزح:: بنفسجي => println!("اللون البنفسجي!"),
}
}

الجبهة الوطنيةرئيسي() {
يترك اللون = قوس قزح:: أزرق ؛
طباعة_لون (لون) ؛
}

قد تحصل على لا يتم إنشاء المتغيرات أبدًا أو تحذيرات مماثلة عندما تحاول تنفيذ الكود أعلاه لأن المتغيرات الأخرى بخلاف المتغير الأزرق لم يتم إنشاؤها في هذا الكود. وبالتالي ، في هذه الحالة ، يمكنك تجاهل هذه التحذيرات بأمان لأنها مقصودة.

ال print_color تأخذ الوظيفة معلمة لون من نوع تعداد قوس قزح. يتطابق بيان المطابقة مع اللون من مجموعة الألوان التي يتم الوصول إليها عبر أسماء المتغيرات. وأخيرًا ، تتم طباعة الرسالة بناءً على اللون المتطابق.

يمكنك استخدام مطابقة النمط للعمليات المعقدة مثل قيم الإرجاع المتعددة بناءً على الشرط.

الجبهة الوطنيةحساب الطول الموجي(اللون: قوس قزح) -> u32 {
مباراة لون {

قوس قزح:: أحمر => 700,
قوس قزح:: برتقالي => 590,
قوس قزح:: أصفر => 570,
قوس قزح:: أخضر => 510,
قوس قزح:: أزرق => 475,
قوس قزح:: نيلي => 445,
قوس قزح:: بنفسجي => 400,
}
}

ال حساب الطول الموجي تأخذ الدالة متغيرًا لونيًا من نوع تعداد قوس قزح كمعامل وتعيد عددًا صحيحًا بدون إشارة يبلغ 32 بت وهو الطول الموجي للون الذي يتطابق مع النمط.

يوفر Rust أيضًا هياكل لإنشاء أنواع مخصصة

تعد Enums مفيدة في تحديد الأنواع المخصصة للعديد من العمليات ، خاصة في الحالات التي تكون فيها الحقول معروفة ومحددة.

يوفر Rust أيضًا الهياكل التي يمكنك استخدامها لإنشاء أنواع مخصصة مع الحقول المسماة. على عكس التعدادات ، تسمح لك البنيات بتعريف حقول من أنواع مختلفة يمكنك الوصول إليها وتعديلها بشكل فردي.