גישה לשדות במבנה
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Rust של Coddy. שיעור 22 מתוך 66.
לאחר שיצרת מופע של struct, תצטרך דרך לשלוף את הערכים המאוחסנים בתוכו. ב-Rust משתמשים בסימון נקודה כדי לגשת לשדות בודדים בתוך struct.
התחביר פשוט: כותבים את שם המופע של המבנה, אחריו נקודה, ואז את שם השדה שרוצים לגשת אליו:
let product = Product {
name: String::from("Laptop"),
price: 999,
};
println!("Product: {}", product.name);
println!("Price: ${}", product.price);סימון נקודה זה פועל בדיוק כמו גישה למאפיינים בשפות תכנות אחרות. אפשר להשתמש בערכים שאליהם ניגשים בביטויים, להקצות אותם למשתנים או להעביר אותם לפונקציות — הם מתנהגים בדיוק כמו כל ערך אחר מאותו סוג.
אתגר
קליתקבלו שלושה קלטים: שם דגם של מכונית, שנת המכונית (כמספר שלם) והקילומטראז׳ שלה (כמספר שלם). הגדירו מבנה Car עם שלושה שדות: model מסוג String, year מסוג i32 ו-mileage מסוג i32. צרו מופע של המבנה הזה באמצעות ערכי הקלט, ואז גשו לכל שדה והדפיסו אותו.
דרישות:
- הגדירו מבנה
Carעם השדות:model: String,year: i32ו-mileage: i32 - קראו את הקלט הראשון כדגם המכונית
- קראו את הקלט השני והמירו אותו ל-
i32עבור השנה - קראו את הקלט השלישי והמירו אותו ל-
i32עבור הקילומטראז׳ - צרו מופע של המבנה
Carעם הערכים האלה - השתמשו בסימון נקודה כדי לגשת לכל שדה והדפיסו את פרטי המכונית בפורמט המדויק שמוצג למטה
קלט:
- שורה ראשונה: דגם המכונית (לדוגמה,
Tesla Model 3) - שורה שנייה: השנה כמספר שלם (לדוגמה,
2022) - שורה שלישית: הקילומטראז׳ כמספר שלם (לדוגמה,
15000)
פלט:
- שורה ראשונה:
Car: [model] - שורה שנייה:
Year: [year] - שורה שלישית:
Mileage: [mileage] km
נסו בעצמכם
use std::io;
// TODO: הגדר כאן את המבנה Car עם השדות: model, year ו-mileage
fn main() {
// קרא את דגם המכונית
let mut model = String::new();
io::stdin().read_line(&mut model).expect("Failed to read line");
let model = model.trim().to_string();
// קרא את השנה
let mut year_input = String::new();
io::stdin().read_line(&mut year_input).expect("Failed to read line");
let year: i32 = year_input.trim().parse().expect("Invalid year");
// קרא את הקילומטראז׳
let mut mileage_input = String::new();
io::stdin().read_line(&mut mileage_input).expect("Failed to read line");
let mileage: i32 = mileage_input.trim().parse().expect("Invalid mileage");
// TODO: צור מופע של המבנה Car באמצעות ערכי הקלט
// TODO: גש לכל שדה והדפס אותו בפורמט הנדרש
// Car: [model]
// Year: [year]
// Mileage: [mileage] km
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
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 אונליין