الانتقال إلى المحتوى الرئيسي
الوحدة 4 · الدرس 1 من 27/14 في الدورة~12 min
دروس الوحدة (1/2)

تعريف ومثيل الهياكل

الهياكل (أو الهياكل) في Rust هي أنواع بيانات مخصصة تسمح لك بتجميع قيم متعددة مرتبطة معًا. وهي تشبه الأشياء أو الفئات في اللغات الأخرى، ولكن دون وراثة.

تعريف الهيكل

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

Rust
struct User {
    username: String,
    email: String,
    active: bool,
    sign_in_count: u64,
}

إنشاء مثيل

لاستخدام البنية، يجب علينا إنشاء مثيل عن طريق ملء جميع الحقول المحددة:

Rust
fn main() {
    let user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };

    // Access fields using dot notation
    println!("Is user {} active? {}", user1.username, user1.active);
}

قابلية الهيكل للتغيير

في Rust، يجب وضع علامة على المثيل بأكمله على أنه قابل للتغيير (mut) إذا كنت تريد تعديل أي من حقوله. لا يسمح الصدأ بوضع علامة على حقول معينة فقط على أنها قابلة للتغيير:

Rust
fn main() {
    let mut user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };

    user1.active = false; // Valid because user1 is mutable!
}

الهياكل Tuple والهياكل المشابهة للوحدة

يدعم Rust أيضًا تنسيقين آخرين للبنية إلى جانب بنيات الحقول المسماة الكلاسيكية:

  1. الهياكل Tuple: لها اسم مرتبط ولكن الحقول لا تحتوي على أسماء فردية، بل أنواع فقط. وهي مفيدة لتحديد وتمييز أنواع معينة:
    Rust
    struct Point(i32, i32, i32);
    let origin = Point(0, 0, 0);
  2. الهياكل المشابهة للوحدة: لا تحدد أي حقول. إنها تتصرف مثل نوع الوحدة (). تكون مفيدة عندما تحتاج إلى تنفيذ سلوكيات (سمات) على نوع ما دون تخزين أي بيانات فيه.

جربه بنفسك

تمرين#rust.m4.l1.e1
المحاولات: 0جارٍ التحميل…

حدد بنية المستخدم أعلاه الرئيسية باستخدام الحقول: اسم المستخدم (نوع السلسلة) والنشط (نوع منطقي).

جارٍ تحميل المحرر…
إظهار التلميح

اكتب `struct User { username: String, active: bool }`before`main`.

الحل متاح بعد 3 من المحاولات

تمرين#rust.m4.l1.e2
المحاولات: 0جارٍ التحميل…

قم بتعديل user1 لجعله قابلاً للتغيير (دع mut user1) وقم بتغيير الحقل النشط إلى false قبل الطباعة.

جارٍ تحميل المحرر…
إظهار التلميح

أضف `mut`to`let user1`لجعله`let mut user1`، ثم أدخل `user1.active = false;`.

الحل متاح بعد 3 من المحاولات

تمرين#rust.m4.l1.e3
المحاولات: 0جارٍ التحميل…

حدد بنية صفية تسمى اللون تحتوي على ثلاثة حقول i32. بشكل رئيسي، قم بإنشاء مثيل للون بالقيم 255 و0 و100 وتخصيصه للمتغير my_color، ثم اطبع العنصر الأول (القيمة الحمراء) باستخدام println!.

جارٍ تحميل المحرر…
إظهار التلميح

حدد بنية المجموعة باستخدام ``struct Color(i32, i32, i32);'. بشكل رئيسي، قم بإنشاء مثيل لها على النحو التالي: "let my_color = Color(255, 0, 100);" وطباعة القيمة الحمراء باستخدام "my_color.0".

الحل متاح بعد 3 من المحاولات