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

الـ Structs القابلة للتعديل

جزء من قسم Logic & Flow في رحلة Rust على Coddy — الدرس 23 من 66.

بشكل افتراضي، تكون مثيلات الـ struct في لغة Rust غير قابلة للتغيير - فبمجرد إنشائها، لا يمكنك تغيير قيم حقولها. ومع ذلك، تماماً كما هو الحال مع المتغيرات الأخرى، يمكنك جعل مثيل الـ struct قابلاً للتغيير عن طريق إضافة الكلمة المفتاحية mut عند التصريح عنه.

عندما تعلن عن مثيل لبنية (struct) كقابل للتغيير (mutable)، يمكنك تعديل أي من حقوله باستخدام تدوين النقطة (dot notation):

let mut player = Player {
    name: String::from("Alice"),
    score: 0,
};

player.score = 100; // هذا يعمل لأن player قابل للتغيير

بدون الكلمة المفتاحية mut، ستؤدي محاولة تغيير حقل إلى خطأ في التجميع. تنطبق القابلية للتغيير على مثيل الـ struct بالكامل - لا يمكنك جعل حقول فردية قابلة للتغيير مع إبقاء الحقول الأخرى غير قابلة للتغيير.

challenge icon

التحدي

سهل

ستتلقى أربعة مدخلات: اسم اللاعب، والدرجة الأولية (كعدد صحيح)، ودرجة إضافية (bonus) لإضافتها (كعدد صحيح)، وتعديل نهائي للدرجة (كعدد صحيح). قم بتعريف هيكل Player يحتوي على حقلين: name من نوع String و score من نوع i32. أنشئ نسخة قابلة للتعديل (mutable) من هذا الهيكل، ثم قم بتعديل حقل الدرجة عدة مرات باستخدام قيم المدخلات.

المتطلبات:

  • قم بتعريف هيكل Player مع الحقول: name: String و score: i32
  • اقرأ المدخل الأول كاسم للاعب
  • اقرأ المدخل الثاني وقم بتحويله إلى i32 للدرجة الأولية
  • أنشئ نسخة mutable من هيكل Player بهذه القيم
  • اقرأ المدخل الثالث وقم بتحويله إلى i32 للدرجة الإضافية
  • أضف الدرجة الإضافية إلى درجة اللاعب الحالية باستخدام تدوين النقطة (dot notation)
  • اقرأ المدخل الرابع وقم بتحويله إلى i32 للتعديل النهائي
  • أضف التعديل النهائي إلى درجة اللاعب الحالية
  • اطبع معلومات اللاعب بالتنسيق الدقيق الموضح أدناه

المدخلات:

  • السطر الأول: اسم اللاعب (مثلاً، Alice)
  • السطر الثاني: الدرجة الأولية كعدد صحيح (مثلاً، 50)
  • السطر الثالث: الدرجة الإضافية كعدد صحيح (مثلاً، 30)
  • السطر الرابع: التعديل النهائي كعدد صحيح (مثلاً، 20)

المخرجات:

  • السطر الأول: Player: [name]
  • السطر الثاني: Final Score: [score]

ورقة مرجعية

تكون مثيلات الـ Struct في لغة Rust غير قابلة للتغيير (immutable) افتراضيًا. لتعديل قيم الحقول بعد الإنشاء، قم بالتصريح عن المثيل كقابل للتغيير (mutable) باستخدام الكلمة المفتاحية mut:

let mut player = Player {
    name: String::from("Alice"),
    score: 0,
};

player.score = 100; // تعديل الحقل باستخدام تدوين النقطة (dot notation)

تنطبق قابلية التغيير (Mutability) على مثيل الـ struct بالكامل - لا يمكنك جعل حقول فردية قابلة للتغيير مع إبقاء الحقول الأخرى غير قابلة للتغيير.

جرّب بنفسك

use std::io;

// TODO: قم بتعريف هيكل Player هنا مع حقول الاسم (name) والنتيجة (score)

fn main() {
    // قراءة اسم اللاعب
    let mut name = String::new();
    io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    // قراءة النتيجة الأولية
    let mut initial_score = String::new();
    io::stdin().read_line(&mut initial_score).expect("Failed to read line");
    let initial_score: i32 = initial_score.trim().parse().expect("Invalid number");
    
    // قراءة نتيجة المكافأة
    let mut bonus = String::new();
    io::stdin().read_line(&mut bonus).expect("Failed to read line");
    let bonus: i32 = bonus.trim().parse().expect("Invalid number");
    
    // قراءة التعديل النهائي
    let mut adjustment = String::new();
    io::stdin().read_line(&mut adjustment).expect("Failed to read line");
    let adjustment: i32 = adjustment.trim().parse().expect("Invalid number");
    
    // TODO: قم بإنشاء مثيل قابل للتعديل من Player
    
    // TODO: أضف نتيجة المكافأة إلى نتيجة اللاعب
    
    // TODO: أضف التعديل النهائي إلى نتيجة اللاعب
    
    // TODO: اطبع المخرجات بالتنسيق المطلوب
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow