Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

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