Menu
Coddy logo textTech

רכיב כפתור

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

challenge icon

אתגר

קל

נמשיך לבנות את מערכת המסמכים שלנו ונוסיף רכיב ממשק משתמש שני: Button. בדומה ל־TextField, הרכיב הזה יממש את ה־trait‏ Draw, וכך ידגים כיצד טיפוסים שונים יכולים לשתף ממשק משותף.

נרחיב את הפרויקט באמצעות קובץ מודול נוסף:

  • draw.rs: השאירו את ה־trait‏ Draw מהאתגרים הקודמים.
  • text_field.rs: השאירו את המבנה TextField ואת המימוש שלו עבור Draw.
  • button.rs: צרו מבנה Button עם שני שדות ציבוריים: label (מסוג String) ו־width (מסוג u32). ממשו את ה־trait‏ Draw עבור Button, כך שקריאה ל־draw() תדפיס את הכפתור בפורמט הזה: Button: {label} (width: {width})
  • main.rs: כללו את שלושת המודולים. צרו גם TextField וגם Button, ואז קראו ל־draw() עבור כל אחד מהם כדי להציג את שני הרכיבים.

המודול button יצטרך לגשת ל־trait‏ Draw באמצעות crate::draw::Draw, בדיוק כפי שעשיתם עם TextField.

הקלטים הבאים יסופקו:

  • שורה ראשונה: התוכן של שדה הטקסט
  • שורה שנייה: התווית של הכפתור
  • שורה שלישית: רוחב הכפתור (כמספר)

הפלט שלכם צריך להציג קודם את שדה הטקסט, ואז את הכפתור, כל אחד בשורה נפרדת:

Text: Welcome
Button: Submit (width: 100)

נסו בעצמכם

mod draw;
mod text_field;
mod button;

use draw::Draw;
use text_field::TextField;
use button::Button;

pub struct Label {
    pub text: String,
}

impl Draw for Label {
    fn draw(&self) {
        println!("{}", self.text);
    }
}

fn main() {
    let mut input1 = String::new();
    std::io::stdin().read_line(&mut input1).expect("Failed to read line");
    let content = input1.trim().to_string();

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

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

    let text_field = TextField { content };
    text_field.draw();

    // TODO: יש ליצור Button עם `label` ו-`width`, ואז לקרוא ל-draw()
    
}

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

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