Menu
Coddy logo textTech

קטלוג ספרייה

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

challenge icon

אתגר

קל

בואו נבנה מערכת קטלוג של ספרייה שמדגימה כיצד traits מאחדים סוגים שונים תחת ממשק משותף! תיצרו קטלוג שבו ספרים וכתבי עת, למרות המאפיינים השונים שלהם, יכולים כולם לתאר את עצמם באמצעות trait משותף.

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

  • catalog.rs: הגדירו את ה-trait CatalogItem עם שיטה יחידה בשם description שמחזירה String. ה-trait הזה מגדיר את החוזה שכל פריטי הספרייה חייבים למלא.
  • items.rs: צרו שתי structs שמממשות את ה-trait שלכם. ל-Book יש title ו-author (שניהם Strings), ואילו ל-Magazine יש name (String) ומספר issue (u32). כל struct צריכה לממש את CatalogItem עם פורמט תיאור ייחודי משלה.
  • main.rs: ייבאו את שני המודולים וצרו מופעים של Book ושל Magazine באמצעות הקלטים שסופקו. קראו לשיטה description עבור כל פריט והדפיסו את התוצאות.

התיאור של Book צריך להיות בפורמט הבא:

Book: {title} by {author}

התיאור של Magazine צריך להיות בפורמט הבא:

Magazine: {name}, Issue {issue}

לדוגמה, עם הקלטים 1984, George Orwell, Nature ו-42:

Book: 1984 by George Orwell
Magazine: Nature, Issue 42

ועם הקלטים The Rust Book, Steve Klabnik, Science Weekly ו-156:

Book: The Rust Book by Steve Klabnik
Magazine: Science Weekly, Issue 156

תקבלו ארבעה קלטים: כותרת הספר, מחבר הספר, שם כתב העת ומספר הגיליון של כתב העת (נתחו את האחרון כ-u32).

נסו בעצמכם

mod catalog;
mod items;

use catalog::CatalogItem;
use items::{Book, Magazine};

fn main() {
    // קרא את הקלטים
    let mut book_title = String::new();
    std::io::stdin().read_line(&mut book_title).expect("Failed to read line");
    let book_title = book_title.trim().to_string();

    let mut book_author = String::new();
    std::io::stdin().read_line(&mut book_author).expect("Failed to read line");
    let book_author = book_author.trim().to_string();

    let mut magazine_name = String::new();
    std::io::stdin().read_line(&mut magazine_name).expect("Failed to read line");
    let magazine_name = magazine_name.trim().to_string();

    let mut issue_input = String::new();
    std::io::stdin().read_line(&mut issue_input).expect("Failed to read line");
    let magazine_issue: u32 = issue_input.trim().parse().expect("Failed to parse issue number");

    // TODO: צור מופע של Book באמצעות book_title ו-book_author

    // TODO: צור מופע של Magazine באמצעות magazine_name ו-magazine_issue

    // TODO: קרא ל-description() עבור כל פריט והדפס את התוצאות
}

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

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