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

نظرة عامة على الـ Structs

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

الآن بعد أن فهمت ما هي الـ structs، دعنا نتعلم كيفية إنشائها واستخدامها فعلياً. يتضمن ذلك خطوتين: أولاً تحديد هيكل الـ struct، ثم إنشاء مثيلات (instances) منه.

لتعريف هيكل (struct)، تستخدم الكلمة المفتاحية struct متبوعة باسم الهيكل وحقوله داخل أقواس معقوفة. كل حقل له اسم ونوع:

struct User {
    username: String,
    active: bool,
}

يؤدي هذا إلى إنشاء مخطط لـ User struct يحتوي على حقلين: username من النوع String و active من النوع bool.

اصطلاح التسمية: يجب أن تستخدم أسماء الـ Struct في Rust نمط PascalCase (يسمى أيضاً UpperCamelCase)، مما يعني أن كل كلمة تبدأ بحرف كبير — على سبيل المثال، User، أو ProductItem، أو ShoppingCart. سيقوم Rust بتحذيرك إذا لم تتبع هذا الاصطلاح.

بمجرد قيامك بتعريف struct، يمكنك إنشاء مثيلات منه عن طريق تحديد قيم لكل حقل:

let user1 = User {
    username: String::from("alice"),
    active: true,
};

لاحظ أنك تقوم بتوفير اسم الـ struct متبوعاً بأقواس معقوفة تحتوي على اسم كل حقل، ونقطتين رأسيتين، وقيمته. ليس من الضروري أن يتطابق ترتيب الحقول مع ترتيب التعريف.

للوصول إلى حقول مثيل الـ struct، استخدم تدوين النقطة (dot notation) — اكتب اسم المثيل متبوعًا بنقطة واسم الحقل:

println!("Username: {}", user1.username);
println!("Active: {}", user1.active);

هنا، يصل user1.username إلى حقل username الخاص بـ user1، ويصل user1.active إلى حقل active. يمكنك استخدام قيم هذه الحقول في أي مكان تستخدم فيه متغيراً عادياً.

challenge icon

التحدي

سهل

ستتلقى ثلاثة مدخلات: اسم المنتج، والسعر (كعدد عشري)، وكمية المخزون (كعدد صحيح). قم بتعريف هيكل Product بثلاثة حقول: name من نوع String، و price من نوع f64، و stock من نوع i32. ثم قم بإنشاء مثيل لهذا الهيكل باستخدام قيم المدخلات واطبع معلومات المنتج.

المتطلبات:

  • قم بتعريف هيكل Product بالحقول: name: String، و price: f64، و stock: i32
  • اقرأ المدخل الأول كاسم للمنتج
  • اقرأ المدخل الثاني وقم بتحويله إلى f64 للسعر
  • اقرأ المدخل الثالث وقم بتحويله إلى i32 لكمية المخزون
  • قم بإنشاء مثيل من هيكل Product بهذه القيم
  • اطبع معلومات المنتج بالتنسيق الموضح أدناه تماماً

المدخلات:

  • السطر الأول: اسم المنتج (على سبيل المثال، Laptop)
  • السطر الثاني: السعر كعدد عشري (على سبيل المثال، 999.99)
  • السطر الثالث: كمية المخزون كعدد صحيح (على سبيل المثال، 15)

المخرجات:

  • السطر الأول: Product: [name]
  • السطر الثاني: Price: $[price]
  • السطر الثالث: Stock: [quantity]

جرّب بنفسك

use std::io;

// TODO: قم بتعريف الـ struct الخاص بـ Product هنا


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 price_input = String::new();
    io::stdin().read_line(&mut price_input).expect("Failed to read line");
    let price: f64 = price_input.trim().parse().expect("Failed to parse price");
    
    // قراءة كمية المخزون
    let mut stock_input = String::new();
    io::stdin().read_line(&mut stock_input).expect("Failed to read line");
    let stock: i32 = stock_input.trim().parse().expect("Failed to parse stock");
    
    // TODO: قم بإنشاء مثيل (instance) لـ Product struct باستخدام قيم المدخلات
    
    
    // TODO: اطبع معلومات المنتج بالتنسيق المطلوب
    
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow