רכיב כפתור
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Rust של Coddy. שיעור 51 מתוך 61.
אתגר
קלנמשיך לבנות את מערכת המסמכים שלנו ונוסיף רכיב ממשק משתמש שני: Button. בדומה ל־TextField, הרכיב הזה יממש את ה־trait Draw, וכך ידגים כיצד טיפוסים שונים יכולים לשתף ממשק משותף.
נרחיב את הפרויקט באמצעות קובץ מודול נוסף:
draw.rs: השאירו את ה־traitDrawמהאתגרים הקודמים.text_field.rs: השאירו את המבנהTextFieldואת המימוש שלו עבורDraw.button.rs: צרו מבנהButtonעם שני שדות ציבוריים:label(מסוגString) ו־width(מסוגu32). ממשו את ה־traitDrawעבור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()
}כל השיעורים ביחידה תכנות מונחה עצמים
1מתודות והתנהגות
מבוא לבלוקי מימושהפרמטר selfמתודות ניתנות לשינויפונקציות משויכותבלוקי מימוש מרוביםשרשור מתודותסיכום – פעולות מלבן4פרויקט: חיית מחמד וירטואלית
הגדרת חיית המחמדהאכלת חיית המחמדתרגלו בעצמכם: קומפיילר Rust אונליין