פונקציות משויכות
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Rust של Coddy. שיעור 4 מתוך 61.
לא כל הפונקציות בבלוק impl צריכות לפעול על מופע קיים. פונקציות שאינן מקבלות את self כפרמטר נקראות פונקציות משויכות: הן משויכות לטיפוס עצמו ולא למופע מסוים כלשהו.
השימוש הנפוץ ביותר בפונקציות משויכות הוא ליצירת בנאים. לפי המוסכמה, לעיתים קרובות קוראים להן new:
struct Player {
name: String,
score: u32,
}
impl Player {
fn new(name: String) -> Player {
Player {
name,
score: 0,
}
}
}
שימו לב שאין פרמטר self. הפונקציה הזאת לא צריכה Player קיים כדי לפעול. במקום זאת, היא יוצרת ומחזירה אחד חדש לגמרי. טיפוס ההחזרה הוא המבנה עצמו.
כדי לקרוא לפונקציה משויכת, השתמשו בתחביר :: עם שם הטיפוס במקום בסימון נקודה:
fn main() {
let player1 = Player::new(String::from("Alice"));
println!("{} starts with {} points", player1.name, player1.score);
// פלט: Alice מתחילה עם 0 נקודות
}
התבנית הזאת מספקת דרך נקייה לאתחל מבנים עם ערכי ברירת מחדל או לוגיקת אימות, תוך שמירה על כך שלוגיקת היצירה תהיה מאוגדת להגדרת הטיפוס. סביר שכבר נתקלת בתחביר הזה עם String::from(): גם זו פונקציה משויכת!
אתגר
קלצרו מבנה Book עם שני שדות: title מסוג String ו-pages מסוג u32.
הוסיפו בלוק מימוש עבור Book עם פונקציה משויכת בשם new ש:
- מקבלת פרמטר
title: String - מחזירה
Bookחדש עם הכותרת הנתונה ועםpagesשמוגדר ל-0
הוסיפו גם מתודה בשם info שמקבלת &self ומחזירה String בתבנית: "{title} has {pages} pages"
תקבלו קלט אחד:
- כותרת הספר (String)
השתמשו בפונקציה המשויכת Book::new כדי ליצור ספר עם הכותרת שסופקה, ואז הדפיסו את התוצאה של קריאה למתודה info.
תבנית הפלט הצפויה:
{title} has {pages} pagesנסו בעצמכם
use std::io;
// TODO: הגדירו את מבנה Book עם השדות title (String) ו־pages (u32)
// TODO: הוסיפו בלוק impl עבור Book שכולל:
// - פונקציה משויכת `new` שמקבלת כותרת ומחזירה Book שבו pages מוגדר ל־0
// - מתודה `info` שמחזירה String בפורמט "{title} has {pages} pages"
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let title = input.trim().to_string();
// TODO: השתמשו ב־Book::new כדי ליצור ספר עם הכותרת שסופקה
// TODO: הדפיסו את תוצאת הקריאה למתודה info
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1מתודות והתנהגות
מבוא לבלוקי מימושהפרמטר selfמתודות ניתנות לשינויפונקציות משויכותבלוקי מימוש מרוביםשרשור מתודותסיכום – פעולות מלבן4פרויקט: חיית מחמד וירטואלית
הגדרת חיית המחמדהאכלת חיית המחמדתרגלו בעצמכם: קומפיילר Rust אונליין