Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الاستعارة في الحلقة

جزء من قسم Fundamentals في رحلة Rust على Coddy — الدرس 67 من 75.

عندما نكتب حلقة تكرارية في Rust، لدينا طريقتان رئيسيتان للتعامل مع بياناتنا: يمكننا النظر إليها (باستخدام &) أو أخذها. على سبيل المثال، لننظر إلى البيانات التالية:

let numbers = vec![1, 2, 3, 4, 5];
let mut sum = 0;

الطريقة 1: النظر إلى البيانات (باستخدام &):

for number in &numbers {
    sum += number;
}
println!("I can use it here: {:?}", numbers);

الطريقة 2: أخذ البيانات (بدون &):

for number in numbers {
    sum += number;
}
// println!("Can't use {:?} anymore!", numbers);
// سيؤدي هذا إلى حدوث خطأ

فكر في الأمر على هذا النحو:

  1. استخدام & يشبه النظر إلى ألبوم صور: يمكنك رؤية جميع الصور، لكن الألبوم يظل كما هو
  1. عدم استخدام & يشبه إخراج الصور: يمكنك استخدامها، لكن الألبوم سيكون فارغاً بعد ذلك

الآن هذا النمط:

for num in numbers.iter() {}

يشبه هذا:

for num in &numbers {}

وحلقة تكرار للتعديل (mutation loop):

for num in numbers.iter_mut() { 
    *num *= 2;
}

يمكن أيضًا كتابتها بهذه الطريقة:

for num in &mut numbers { 
    *num *= 2;
}

ورقة مرجعية

في حلقات Rust التكرارية، يمكنك إما النظر إلى البيانات (باستخدام &) أو نقل ملكيتها:

النظر إلى البيانات (الاستعارة):

let numbers = vec![1, 2, 3, 4, 5];
for number in &numbers {
    sum += number;
}
// لا يزال من الممكن استخدام numbers بعد الحلقة التكرارية

نقل الملكية:

let numbers = vec![1, 2, 3, 4, 5];
for number in numbers {
    sum += number;
}
// لا يمكن استخدام numbers بعد الحلقة التكرارية

طرق المكرر (Iterator methods):

// هذه متكافئة:
for num in numbers.iter() {}
for num in &numbers {}

// للتعديل:
for num in numbers.iter_mut() { *num *= 2; }
for num in &mut numbers { *num *= 2; }

جرّب بنفسك

لا يتضمّن هذا الدرس تحدّيًا برمجيًا.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Fundamentals