סיכום – נקודת ציון
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Rust של Coddy. שיעור 28 מתוך 61.
אתגר
קלבואו נבנה מערכת קואורדינטות גמישה שעובדת עם כל סוג מספרי! תיצרו מבנה גנרי Point שיכול לייצג מיקומים באמצעות מספרים שלמים עבור משחקים המבוססים על רשת, או מספרים בנקודה צפה עבור גרפיקה מדויקת: הכול באמצעות הגדרה אחת.
תארגנו את הקוד שלכם בשני קבצים:
point.rs: הגדירו מבנה גנרי ציבוריPoint<T>עם שני שדות ציבוריים:xו-y, שניהם מסוגT. ממשו מתודות עבור הנקודה שלכם:- פונקציה משויכת
newשיוצרת נקודה מקואורדינטות x ו-y - מתודה
translateשמקבלת ערכי dx ו-dy ומחזירהPointחדשה שהקואורדינטות שלה הוזזו בכמויות האלה (הדבר מחייב אתTלתמוך בחיבור ובהעתקה, לכן השתמשו באילוץT: std::ops::Add<Output = T> + Copy)
- פונקציה משויכת
main.rs: צרפו את מודול הנקודה שלכם והדגימו כיצד אותו מבנה גנרי עובד בצורה חלקה עם סוגים מספריים שונים.
בקובץ הראשי שלכם, הדגימו את המבנה הגנרי Point באמצעות:
- יצירת נקודה של מספרים שלמים באמצעות שתי הקלטות הראשונות (שנותחו כ-
i32) - הזזתה באמצעות הקלטות השלישית והרביעית (גם הן
i32) - יצירת נקודה של מספרים בנקודה צפה באמצעות ההקלטות החמישית והשישית (שנותחו כ-
f64) - הצגת כל שלוש הנקודות
הפלט שלכם צריך להיות בפורמט הזה:
Integer point: ({x}, {y})
After translation: ({x}, {y})
Float point: ({x}, {y})לדוגמה, עבור הקלטות 3, 5, 2, -1, 1.5 ו-2.5:
Integer point: (3, 5)
After translation: (5, 4)
Float point: (1.5, 2.5)שימו לב כיצד Point::new(3, 5) יוצרת Point<i32>, בעוד Point::new(1.5, 2.5) יוצרת Point<f64>: אותה הגדרת מבנה מתאימה לשניהם!
תקבלו שש הקלטות: שני מספרים שלמים עבור הנקודה הראשונה, שני מספרים שלמים עבור ההזזה, ושני מספרים עשרוניים עבור הנקודה השנייה.
נסו בעצמכם
mod point;
use point::Point;
fn main() {
// קרא את הקלטים
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let x1: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let y1: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let dx: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let dy: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let x2: f64 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let y2: f64 = input.trim().parse().expect("Invalid input");
// TODO: צור נקודה עם קואורדינטות של מספרים שלמים באמצעות x1 ו־y1
// TODO: הזז את הנקודה בעלת הקואורדינטות השלמות ב־dx וב־dy
// TODO: צור נקודה עם קואורדינטות של מספרים עשרוניים באמצעות x2 ו־y2
// TODO: הדפס את התוצאות בפורמט הנדרש:
// println!("Integer point: ({}, {})", ...);
// println!("After translation: ({}, {})", ...);
// println!("Float point: ({}, {})", ...);
}
כל השיעורים ביחידה תכנות מונחה עצמים
1מתודות והתנהגות
מבוא לבלוקי מימושהפרמטר selfמתודות ניתנות לשינויפונקציות משויכותבלוקי מימוש מרוביםשרשור מתודותסיכום – פעולות מלבן4פרויקט: חיית מחמד וירטואלית
הגדרת חיית המחמדהאכלת חיית המחמדתרגלו בעצמכם: קומפיילר Rust אונליין