الأنماط والتفكيك

عند العمل مع التجمعات (tuples) والقيم المهيكلة الأخرى، من الشائع الرغبة في استخراج القيم الداخلية إلى متغيرات محلية. يمكن القيام بذلك يدويًا عن طريق الوصول المباشر إلى القيم الداخلية:

fn print_tuple(tuple: (i32, i32)) {
    let left = tuple.0;
    let right = tuple.1;
    println!("left: {left}, right: {right}");
}

ومع ذلك، تدعم Rust أيضًا استخدام مطابقة الأنماط (pattern matching) لتفكيك قيمة أكبر إلى أجزائها المكونة:

fn print_tuple(tuple: (i32, i32)) {
    let (left, right) = tuple;
    println!("left: {left}, right: {right}");
}
This slide should take about 5 minutes.
  • الأنماط المستخدمة هنا هي "غير قابلة للدحض" (irrefutable)، مما يعني أن المترجم يمكنه التحقق بشكل ثابت من أن القيمة على يمين = لها نفس بنية النمط.
  • اسم المتغير هو نمط غير قابل للدحض (irrefutable pattern) يطابق دائمًا أي قيمة، لذلك يمكننا أيضًا استخدام let لإعلان متغير واحد.
  • تدعم Rust أيضًا استخدام الأنماط في العبارات الشرطية (conditionals)، مما يسمح بمقارنة المساواة والتفكيك (destructuring) في نفس الوقت. سيتم مناقشة هذا الشكل من مطابقة الأنماط بمزيد من التفصيل لاحقًا.
  • قم بتحرير الأمثلة أعلاه لإظهار خطأ المترجم عندما لا يتطابق النمط مع القيمة التي يتم مطابقتها.