שיעורי מודול (1/2)
הגדרה ויצירת מבנים
מבנים (או מבנים) ב-Rust הם סוגי נתונים מותאמים אישית המאפשרים לך לקבץ ערכים קשורים מרובים יחד. הם דומים לאובייקטים או מחלקות בשפות אחרות, אך ללא ירושה.
הגדרת מבנה
כדי להגדיר מבנה, אנו משתמשים במילת המפתח struct ואחריה השם ב-PascalCase. בפנים, אנו מגדירים את השמות והסוגים של השדות:
struct User {
username: String,
email: String,
active: bool,
sign_in_count: u64,
}יצירת מופע
כדי להשתמש במבנה, עלינו ליצור מופע על ידי מילוי כל השדות שצוינו:
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) אם ברצונך לשנות כל אחד מהשדות שלו. חלודה אינה מאפשרת לסמן רק שדות מסוימים כניתנים לשינוי:
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 תומך גם בשני פורמטים של מבנה מלבד מבני שדה קלאסיים:
- מבני Tuple: יש להם שם משויך אבל לשדות אין שמות בודדים, רק סוגים. הם שימושיים להגדרה והבחנה בין סוגים ספציפיים:
Rust
struct Point(i32, i32, i32); let origin = Point(0, 0, 0); - מבנים דמויי יחידה: הם לא מגדירים שדות כלשהם. הם מתנהגים כמו סוג היחידה
(). הם שימושיים כאשר אתה צריך ליישם התנהגויות (תכונות) על סוג מבלי לאחסן בו נתונים.
נסה זאת בעצמך
הגדר את מבנה המשתמש מעל main עם שדות: שם משתמש (סוג מחרוזת) ופעיל (סוג bool).
הצג רמז
כתוב `struct User { שם משתמש: מחרוזת, פעיל: bool }`before`main`.
הפתרון זמין לאחר 3 ניסיונות
שנה את משתמש1 כדי שיהיה ניתן לשינוי (תן mut user1) ושנה את השדה הפעיל ל-false לפני ההדפסה.
הצג רמז
הוסף `mut`to`לתת משתמש1`כדי לגרום לזה `לתת mut user1`, ואז הכנס `user1.active = false;`.
הפתרון זמין לאחר 3 ניסיונות
הגדר מבנה 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 ניסיונות