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

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

جزء من قسم المنطق وتدفّق التنفيذ في رحلة Rust على Coddy. الدرس 21 من 66.

الآن بعد أن فهمت ما هي الهياكل، لنتعلّم كيفية إنشائها واستخدامها فعليًا. يتضمن ذلك خطوتين: أولًا تعريف بنية الهيكل، ثم إنشاء مثيلات منه.

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

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

ينشئ هذا مخططًا لبنية User تحتوي على حقلين: username من النوع String وactive من النوع bool.

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

بمجرد أن تعرّف struct، يمكنك إنشاء instances منه عبر تحديد values لكل حقل:

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

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

للوصول إلى حقول مثيل struct، استخدم ترميز النقطة: اكتب اسم المثيل متبوعًا بنقطة ثم اسم الحقل:

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

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

challenge icon

التحدي

سهل

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

المتطلبات:

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

الإدخال:

  • السطر الأول: اسم Product (مثلًا: Laptop)
  • السطر الثاني: السعر كعدد عشري (مثلًا: 999.99)
  • السطر الثالث: كمية المخزون كعدد صحيح (مثلًا: 15)

الإخراج:

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

جرّب بنفسك

use std::io;

// TODO: عرّف هيكل 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: أنشئ مثيلاً من هيكل Product باستخدام قيم الإدخال
    
    
    // TODO: اطبع معلومات المنتج بالتنسيق المطلوب
    
}
quiz iconاختبر نفسك

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

جميع دروس المنطق وتدفّق التنفيذ

تدرّب بنفسك: مترجم Rust عبر الإنترنت