عبارات المطابقة
مقدمة
عبارات match هي جمل الشرط التي تقارن قيمة واحدة مع أنماط متعددة.
مفيدة للتعبير بشكل أكثر وضوحًا عن نية الشرط مقارنةً بالسلسلة if / else if.
حاليًا، match في Wave هو statement(عبارة) وليس مدعومًا كهيكل تعبير يتم تقييمه مباشرة إلى قيمة.
هذا يعني، var x = match (...) { ... } لا يمكن استخدام هيكل مثل هذا.
القواعد الأساسية للنحو
match (value) {
pattern1 => {
// كتلة التنفيذ
}
pattern2 => {
// كتلة التنفيذ
}
_ => {
// الكتلة الافتراضية
}
}
قواعد النحو:
- تستخدم الرأسية شكل
match (expr). - يستخدم كل قسم شكل
{ ... }. - يجب أن تحتوي مدونة القسم على
{ ... }كحاوية الكتلة. - يمكن استخدام مسافة التبويب بين الأقسام أو استخدام
,أو;كفاصل.
أنواع الأنماط
الأنماط المدعومة حاليًا هي الأشكال التالية.
- نمط أرقام عددية
0 => { ... }
1 => { ... }
42 => { ... }
- نمط المعرف
Off => { ... }
On => { ... }
نمط المعرف بالأحرى يُستخدم للقيم التي يمكن تفسيرها كثوابت عددية مثل متغيرات enum.
- نمط جريح (
_)
_ => { ... }
هو الذراع الافتراضي الذي يتم تنفيذه عندما لا يتطابق مع أي نمط.
نوع الهدف من التطابق
وفقًا للبنية الحالية، يجب أن تكون القيمة المستهدفة لـ match من سلسلة عدد صحيح / سلسلة enum.
لا يمكن استخدام السلاسل، والأرقام العائمة، والهياكل كأهداف لـ match.
مثال 1: فرع الأرقام العددية
fun classify_num(v: i32) -> i32 {
var result: i32 = -1;
match (v) {
0 => {
result = 10;
}
1 => {
result = 20;
}
_ => {
result = 99;
}
}
return result;
}
مثال 2: فرع enum
enum Mode -> i32 {
Off = 0,
On = 1,
Unknown = 2
}
fun classify_mode(m: Mode) -> i32 {
match (m) {
Off => {
return 1;
}
On => {
return 2;
}
_ => {
return 3;
}
}
}
قواعد الإجراءات
- مثل السلسلة
switch، يتم تنفيذ قسم متطابق واحد فقط. - لا يوجد امتداد تلقائي (fallthrough).
- يمكن استخدام الذراع
_مرة واحدة فقط. - غير مطلوب الذراع
_قانونيًا. (إذا لم يكن هناك ذراع متطابق، لن يتم تنفيذ أي ذراع)
نقاط التحذير
- حظر الحالات المكررة
- تأدي إعادة تعريف حالة معينة إلى خطأ في الترجمة.
- حظر التكرار مع
_
- لا يمكن الإعلان عن الذراع
_أكثر من مرة.
- ضرورة كتلة الذراع
- يجب أن يحتوي الجزء المخصص للنمط بعد
=>على{ ... }لاحتواء الكتلة.
- يجب أن يكون النمط ثابتًا
- يُرجى استخدام الأنماط التي يمكن تفسيرها كثوابت عددية أو متغيرات enum فقط.
ملخص
عبارة التحكم match في Wave هي مثالية للاستخدام في فروع الأرقام / enum.
تستخدم بنية => + كتلة، ويمكن استخدام جريح (_) لتحديد فرع افتراضي.
تزداد قابلية القراءة عند وجود حالات فرع كثيرة مقارنةً بطريقة if / else if، مما يسهل توصيل الغرض بشكل أكبر.
