انتقل إلى المحتوى الرئيسي

عبارات المطابقة

مقدمة

عبارات match هي جمل الشرط التي تقارن قيمة واحدة مع أنماط متعددة. مفيدة للتعبير بشكل أكثر وضوحًا عن نية الشرط مقارنةً بالسلسلة if / else if.

حاليًا، match في Wave هو statement(عبارة) وليس مدعومًا كهيكل تعبير يتم تقييمه مباشرة إلى قيمة. هذا يعني، var x = match (...) { ... } لا يمكن استخدام هيكل مثل هذا.


القواعد الأساسية للنحو

match (value) {
pattern1 => {
// كتلة التنفيذ
}
pattern2 => {
// كتلة التنفيذ
}
_ => {
// الكتلة الافتراضية
}
}

قواعد النحو:

  • تستخدم الرأسية شكل match (expr).
  • يستخدم كل قسم شكل { ... }.
  • يجب أن تحتوي مدونة القسم على { ... } كحاوية الكتلة.
  • يمكن استخدام مسافة التبويب بين الأقسام أو استخدام , أو ; كفاصل.

أنواع الأنماط

الأنماط المدعومة حاليًا هي الأشكال التالية.

  1. نمط أرقام عددية
0 => { ... }
1 => { ... }
42 => { ... }
  1. نمط المعرف
Off => { ... }
On => { ... }

نمط المعرف بالأحرى يُستخدم للقيم التي يمكن تفسيرها كثوابت عددية مثل متغيرات enum.

  1. نمط جريح (_)
_ => { ... }

هو الذراع الافتراضي الذي يتم تنفيذه عندما لا يتطابق مع أي نمط.


نوع الهدف من التطابق

وفقًا للبنية الحالية، يجب أن تكون القيمة المستهدفة لـ 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).
  • يمكن استخدام الذراع _ مرة واحدة فقط.
  • غير مطلوب الذراع _ قانونيًا. (إذا لم يكن هناك ذراع متطابق، لن يتم تنفيذ أي ذراع)

نقاط التحذير

  1. حظر الحالات المكررة
  • تأدي إعادة تعريف حالة معينة إلى خطأ في الترجمة.
  1. حظر التكرار مع _
  • لا يمكن الإعلان عن الذراع _ أكثر من مرة.
  1. ضرورة كتلة الذراع
  • يجب أن يحتوي الجزء المخصص للنمط بعد => على { ... } لاحتواء الكتلة.
  1. يجب أن يكون النمط ثابتًا
  • يُرجى استخدام الأنماط التي يمكن تفسيرها كثوابت عددية أو متغيرات enum فقط.

ملخص

عبارة التحكم match في Wave هي مثالية للاستخدام في فروع الأرقام / enum. تستخدم بنية => + كتلة، ويمكن استخدام جريح (_) لتحديد فرع افتراضي.

تزداد قابلية القراءة عند وجود حالات فرع كثيرة مقارنةً بطريقة if / else if، مما يسهل توصيل الغرض بشكل أكبر.