الأنماط والمطابقة (Patterns and Matching)
الأنماط (Patterns) هي صيغة خاصة في لغة Rust للمطابقة مع بنية الأنواع (Types)، سواء كانت معقدة أم بسيطة. يمنحك استخدام Patterns بالاقتران مع تعبيرات match والبنى الأخرى تحكماً أكبر في تدفق التحكم (Control Flow) للبرنامج. يتكون Pattern من مزيج من العناصر التالية:
- القيم المكتوبة مباشرة (Literals)
- المصفوفات (Arrays)، أو التعدادات (Enums)، أو الهياكل (Structs)، أو الصفوف (Tuples) المفككة (Destructured)
- المتغيرات (Variables)
- الرموز الشاملة (Wildcards)
- العناصر النائبة (Placeholders)
تشمل بعض أمثلة Patterns كلاً من x و (a, 3) و Some(Color::Red). في السياقات التي تكون فيها Patterns صالحة، تصف هذه المكونات شكل البيانات. يقوم برنامجنا بعد ذلك بمطابقة القيم مع Patterns لتحديد ما إذا كانت تمتلك شكل البيانات الصحيح لمواصلة تشغيل جزء معين من الكود (Code).
لاستخدام Pattern، نقوم بمقارنته بقيمة ما. إذا تطابق Pattern مع القيمة، فإننا نستخدم أجزاء القيمة في Code الخاص بنا. تذكر تعبيرات match في الفصل 6 التي استخدمت Patterns، مثل مثال آلة فرز العملات المعدنية. إذا كانت القيمة تناسب شكل Pattern، فيمكننا استخدام الأجزاء المسماة. وإذا لم تكن كذلك، فلن يعمل Code المرتبط بـ Pattern.
هذا الفصل هو مرجع لكل ما يتعلق بـ Patterns. سنغطي الأماكن الصالحة لاستخدام Patterns، والفرق بين الأنماط القابلة للنقض (Refutable Patterns) وغير القابلة للنقض (Irrefutable Patterns)، والأنواع المختلفة لصيغ Patterns التي قد تراها. بنهاية الفصل، ستعرف كيفية استخدام Patterns للتعبير عن العديد من المفاهيم بطريقة واضحة.