סקירה כללית על מבנים
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Rust של Coddy. שיעור 21 מתוך 66.
עכשיו, כשאתה מבין מהן structs, בוא נלמד איך ליצור אותן ולהשתמש בהן בפועל. התהליך כולל שני שלבים: תחילה מגדירים את המבנה של ה־struct, ואז יוצרים מופעים שלו.
כדי להגדיר struct, משתמשים במילת המפתח struct ואחריה שם ה־struct והשדות שלו בתוך סוגריים מסולסלים. לכל שדה יש שם וסוג:
struct User {
username: String,
active: bool,
}הדבר יוצר תבנית עבור המבנה User עם שני שדות: username מסוג String ו-active מסוג bool.
מוסכמת שמות: שמות מבנים ב-Rust צריכים להשתמש ב-PascalCase (שנקראת גם UpperCamelCase), כלומר כל מילה מתחילה באות גדולה, למשל User, ProductItem או ShoppingCart. Rust תציג אזהרה אם לא תפעלו לפי המוסכמה הזאת.
לאחר שהגדרת struct, תוכל ליצור מופעים שלו על ידי ציון ערכים לכל אחד מהשדות:
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. אפשר להשתמש בערכי השדות האלה בכל מקום שבו היית משתמש במשתנה רגיל.
אתגר
קלתקבלו שלוש קלטים: שם מוצר, מחיר (כמספר עשרוני) וכמות במלאי (כמספר שלם). הגדירו struct בשם Product עם שלושה שדות: name מסוג String, price מסוג f64 ו־stock מסוג i32. לאחר מכן צרו מופע של struct זה באמצעות ערכי הקלט והדפיסו את פרטי המוצר.
דרישות:
- הגדירו struct בשם
Productעם השדות:name: String,price: f64ו־stock: i32 - קראו את הקלט הראשון כשם המוצר
- קראו את הקלט השני והמירו אותו ל־
f64עבור המחיר - קראו את הקלט השלישי והמירו אותו ל־
i32עבור הכמות במלאי - צרו מופע של struct מסוג
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: הדפיסו את פרטי המוצר בפורמט הנדרש
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1זרימת בקרה מתקדמת
ביטוי 'match'התאמה למספר ערכיםהתאמה לטווחיםביטוי 'if let'לולאות כביטוייםסיכום – מנתח פקודות פשוט4קיבוץ נתונים באמצעות מבנים
מהו מבנה?סקירה כללית על מבניםגישה לשדות במבנהמבנים הניתנים לשינוימבנים כפרמטרים של פונקציהמבני טופלסיכום – יצירת מבנה ספר7טיפול בשגיאות באמצעות 'Result'
מהו 'Result'?שימוש ב-'match' עם 'Result'is_ok() ו-is_err()קיצורי דרך: unwrap ו-expectאופרטור סימן השאלה '?'המרת מחרוזות למספריםסיכום - פונקציית חילוק בטוחה10Closures ופונקציות אנונימיות
מהו Closure?הגדרת Closure פשוטClosures עם פרמטריםלכידת הסביבהסיכום – Closure פשוט לחיבור2מבוא לווקטורים
מהו וקטור?יצירת וקטורהוספת איברים באמצעות pushגישה לאיברי וקטורמעבר על וקטורמעבר ניתן לשינויהסרת איבריםסיכום – מעקב בסיסי אחר ניקוד5זוגות מפתח-ערך באמצעות מפות גיבוב
מהי מפת גיבוב?יצירת מפת גיבובהוספת זוגות מפתח-ערךגישה לערכיםמעבר על מפת גיבובעדכון ערךהסרת זוגסיכום – מונה מיליםתרגלו בעצמכם: קומפיילר Rust אונליין