דילוג לתוכן המרכזי
מודול 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טוען...

הגדר את מבנה המשתמש מעל main עם שדות: שם משתמש (סוג מחרוזת) ופעיל (סוג bool).

טוען עורך...
הצג רמז

כתוב `struct User { שם משתמש: מחרוזת, פעיל: bool }`before`main`.

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#rust.m4.l1.e2
ניסיונות: 0טוען...

שנה את משתמש1 כדי שיהיה ניתן לשינוי (תן mut user1) ושנה את השדה הפעיל ל-false לפני ההדפסה.

טוען עורך...
הצג רמז

הוסף `mut`to`לתת משתמש1`כדי לגרום לזה `לתת mut user1`, ואז הכנס `user1.active = false;`.

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#rust.m4.l1.e3
ניסיונות: 0טוען...

הגדר מבנה tuple בשם Color המכיל שלושה שדות i32. באופן ראשי, הצג את Color עם הערכים 255, 0 ו-100 המקצים אותו למשתנה my_color, ולאחר מכן הדפס את האלמנט הראשון שלו (ערך אדום) באמצעות println!.

טוען עורך...
הצג רמז

הגדר את מבנה ה-tuple עם `struct Color(i32, i32, i32);`. ב-main, הצג אותו בתור `let my_color = Color(255, 0, 100);`והדפיס את הערך האדום עם `my_color.0`.

הפתרון זמין לאחר 3 ניסיונות