טרייט Debug
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Rust של Coddy. שיעור 35 מתוך 61.
הספרייה הסטנדרטית של Rust כוללת תכונות רבות שהוגדרו מראש, המספקות פונקציונליות נפוצה. אחת התכונות השימושיות ביותר לפיתוח היא התכונה Debug, שמאפשרת לך להדפיס את התוכן של מבנה נתונים כדי לבדוק אותו.
אם תנסה להדפיס מבנה מותאם אישית ישירות, Rust לא תדע כיצד להציג אותו:
struct Player {
name: String,
score: u32,
}
let p = Player { name: String::from("Alice"), score: 100 };
println!("{:?}", p); // שגיאה! Debug לא מומש
המעצב {:?} דורש את ה־trait Debug. במקום לממש אותו ידנית, Rust מספקת קיצור דרך: המאפיין #[derive]. הצב אותו ישירות מעל הגדרת המבנה שלך:
#[derive(Debug)]
struct Player {
name: String,
score: u32,
}
let p = Player { name: String::from("Alice"), score: 100 };
println!("{:?}", p); // Player { name: "Alice", score: 100 }
המאפיין #[derive(Debug)] מורה למהדר ליצור באופן אוטומטי את המימוש של Debug. זה עובד כל עוד כל השדות במבנה שלך מממשים גם הם את Debug (מה שרוב הטיפוסים הסטנדרטיים עושים).
לפלט קריא יותר עם מבנים מקוננים, השתמשו ב-{:#?} להדפסה מעוצבת:
println!("{:#?}", p);
// Player {
// name: "Alice",
// score: 100,
// }
הפקת Debug חיונית במהלך הפיתוח. היא מאפשרת לך לבדוק במהירות את הנתונים שלך בלי לכתוב קוד עיצוב מותאם אישית.
אתגר
קלבואו נאפשר לבדוק את המבנים שלך באמצעות גזירת המאפיין Debug! תיצור מערכת מלאי פשוטה שבה אפשר להדפיס פריטים למטרות ניפוי שגיאות.
תארגן את הקוד שלך בשני קבצים:
inventory.rs: הגדר מבנהItemציבורי עם שני שדות ציבוריים:name(String) ו-quantity(u32). השתמש במאפיין#[derive(Debug)]כדי לממש באופן אוטומטי את המאפיין Debug עבור המבנה שלך.main.rs: כלול את מודול המלאי שלך וצור מופע שלItemבאמצעות הקלטים שסופקו. הדפס את הפריט באמצעות מעצב הניפוי{:?}כדי להציג את המבנה הפנימי שלו.
היופי בגזירת Debug הוא ש-Rust יוצרת עבורך באופן אוטומטי את קוד העיצוב: אין צורך במימוש ידני! המבנה שלך צריך רק את המאפיין, ואז אפשר להדפיס אותו באמצעות {:?}.
הפלט שלך אמור להציג את הפריט בפורמט הניפוי של Rust:
Item { name: "{name}", quantity: {quantity} }לדוגמה, עם הקלטים Keyboard ו-15:
Item { name: "Keyboard", quantity: 15 }תקבל שני קלטים: שם הפריט והכמות (יש לנתח כ-u32).
נסו בעצמכם
mod inventory;
use inventory::Item;
fn main() {
// קרא את הקלט
let mut name = String::new();
std::io::stdin().read_line(&mut name).expect("Failed to read line");
let name = name.trim().to_string();
let mut quantity_str = String::new();
std::io::stdin().read_line(&mut quantity_str).expect("Failed to read line");
let quantity: u32 = quantity_str.trim().parse().expect("Failed to parse quantity");
// TODO: צור מופע של Item עם השם והכמות הנתונים
// TODO: הדפס את הפריט באמצעות מעצב הפלט לניפוי שגיאות {:?}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1מתודות והתנהגות
מבוא לבלוקי מימושהפרמטר selfמתודות ניתנות לשינויפונקציות משויכותבלוקי מימוש מרוביםשרשור מתודותסיכום – פעולות מלבן4פרויקט: חיית מחמד וירטואלית
הגדרת חיית המחמדהאכלת חיית המחמדתרגלו בעצמכם: קומפיילר Rust אונליין