Menu
Coddy logo textTech

טרייט Display

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Rust של Coddy. שיעור 36 מתוך 61.

בעוד ש-Debug נהדר למפתחים שבודקים נתונים, המאפיין Display מיועד לפלט שמוצג למשתמש. הוא זה שמפעיל את מעצב {} ב-println!. בניגוד ל-Debug, Rust לא יכולה לגזור את Display באופן אוטומטי. עליך לממש אותו ידנית.

כדי לממש את Display, צריך לייבא את המודול fmt ולממש את המתודה fmt:

use std::fmt;

struct Temperature {
    celsius: f64,
}

impl fmt::Display for Temperature {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "{}°C", self.celsius)
    }
}

המתודה fmt מקבלת Formatter ומחזירה fmt::Result. משתמשים במאקרו write! כדי לעצב את הפלט, תוך גישה לשדות של המבנה באמצעות self.

כעת אפשר להדפיס את המבנה באמצעות המעצב הסטנדרטי {}:

let temp = Temperature { celsius: 23.5 };
println!("{}", temp);  // 23.5°C

ההבדל העיקרי: פלט Debug מציג את המבנה של הנתונים שלך (שימושי לניפוי שגיאות), בעוד שפלט Display מלוטש ומיועד למשתמשי הקצה. מבנה יכול לממש את שניהם: השתמשו ב־{:?} לניפוי שגיאות וב־{} לפלט נקי.

challenge icon

אתגר

קל

בואו ניצור מערכת ידידותית למשתמש להצגת מוצרים! בעוד ש-Debug מציג את המבנה הגולמי של הנתונים שלך, ה-trait Display מאפשר לך ליצור פלט מלוטש וקריא לבני אדם, שמתאים במיוחד למשתמשי הקצה.

תארגן את הקוד שלך בשני קבצים:

  • product.rs: הגדר struct ציבורי בשם Product עם שני שדות ציבוריים: name (String) ו-price (f64). ממש את ה-trait Display עבור ה-struct שלך, כך שהפלט שלו יהיה {name} - ${price}. זכור לייבא את std::fmt ולהשתמש במאקרו write! בתוך המתודה fmt שלך.
  • main.rs: ייבא את מודול המוצר שלך וצור מופע של Product באמצעות הקלטים שסופקו. הדפס את המוצר באמצעות מעצב ברירת המחדל {} כדי להציג את הפלט המותאם אישית שלך.

ה-trait Display מחייב אותך לממש את המתודה fmt באופן ידני: Rust לא יכולה לגזור אותה באופן אוטומטי כמו Debug. כך יש לך שליטה מלאה על האופן שבו הטיפוס שלך מוצג למשתמשים.

הפלט שלך צריך להציג את המוצר בתבנית נקייה וידידותית למשתמש:

{name} - ${price}

לדוגמה, עבור הקלטים Wireless Mouse ו-29.99:

Wireless Mouse - $29.99

תקבל שני קלטים: שם המוצר והמחיר (יש לנתח כ-f64).

נסו בעצמכם

mod product;

use product::Product;

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 price_input = String::new();
    std::io::stdin().read_line(&mut price_input).expect("Failed to read line");
    let price: f64 = price_input.trim().parse().expect("Failed to parse price");

    // TODO: צרו מופע של Product עם השם והמחיר

    // TODO: הדפיסו את המוצר באמצעות המפרמט {}
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Rust אונליין