מילת המפתח Public
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Rust של Coddy. שיעור 9 מתוך 61.
בשיעור הקודם למדת איך לארגן קוד בקובצי מודולים נפרדים. עם זאת, אם תנסה להשתמש במבנה Player מתוך main.rs, תיתקל בשגיאת מהדר. הסיבה לכך היא שכל דבר במודול Rust הוא פרטי כברירת מחדל.
כדי לאפשר גישה לפריטים מחוץ למודול שלהם, עליך לסמן אותם במפורש באמצעות מילת המפתח pub:
// player.rs
pub struct Player {
pub name: String,
pub score: u32,
}
impl Player {
pub fn new(name: String) -> Player {
Player { name, score: 0 }
}
}
שימו לב כיצד pub מופיע בכמה מקומות: במבנה עצמו, בכל שדה ובמתודה. כל פריט זקוק להצהרת נראות משלו.
בלי pub במבנה, קבצים אחרים אפילו לא יכולים לציין את שם הטיפוס. בלי pub בשדות, הם לא יכולים לגשת ישירות לנתונים. בלי pub בשיטות, הם לא יכולים לקרוא להן.
כעת, ב־main.rs, אפשר להשתמש בפריטים הציבוריים של המודול:
// main.rs
mod player;
use player::Player;
fn main() {
let p = Player::new(String::from("Alice"));
println!("{}", p.name);
}
המשפט use מכניס את Player לטווח התחולה, כך שלא תצטרכו לכתוב player::Player בכל פעם. הגישה הזו, שבה ברירת המחדל היא פרטיות, מכוונת. היא מעודדת אתכם לחשוב היטב אילו חלקים בקוד שלכם צריכים להיות חשופים לעולם החיצון.
אתגר
קלבואו נבנה קטלוג מוצרים פשוט באמצעות ארגון הקוד בשני קבצים והפיכת הפריטים המתאימים לציבוריים, כדי שיהיה אפשר להשתמש בהם מתוך התוכנית הראשית.
תיצרו שני קבצים:
product.rs: הגדירו מבנהProductעם שני שדות:name(String) ו-price(f64). הוסיפו פונקציה משויכת בשםnewשמקבלת שם ומחיר ומחזירהProductחדש. זכרו לסמן את המבנה, את השדות שלו ואת המתודה כציבוריים, כדי שאפשר יהיה לגשת אליהם מחוץ למודול.main.rs: הצהירו על מודול product, הכניסו אתProductלתחום באמצעות פקודתuse, ואז צרו מוצר והדפיסו את הפרטים שלו.
חשבו היטב היכן צריך להשתמש במילת המפתח pub: המבנה עצמו צריך להיות גלוי, צריך להיות אפשר לקרוא את השדות, וצריך להיות אפשר לקרוא למתודת הבנאי מתוך main.rs.
הפלט שלכם צריך להיות בדיוק בפורמט הבא:
Product: {name}, Price: ${price}לדוגמה, אם תיצרו מוצר עם השם "Laptop" והמחיר 999.99, הפלט יהיה:
Product: Laptop, Price: $999.99תקבלו שתי כניסות: שם המוצר והמחיר.
נסו בעצמכם
// הצהר על המודול product
mod product;
// TODO: הכנס את Product לטווח ההכרה באמצעות הצהרת use
fn main() {
// קרא קלט
let mut name = String::new();
std::io::stdin().read_line(&mut name).expect("Failed to read line");
let name = name.trim().to_string();
let mut price_input = String::new();
std::io::stdin().read_line(&mut price_input).expect("Failed to read line");
let price: f64 = price_input.trim().parse().expect("Failed to parse price");
// TODO: צור Product חדש באמצעות הפונקציה Product::new
// TODO: הדפס את פרטי המוצר בפורמט:
// מוצר: {name}, מחיר: ${price}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1מתודות והתנהגות
מבוא לבלוקי מימושהפרמטר selfמתודות ניתנות לשינויפונקציות משויכותבלוקי מימוש מרוביםשרשור מתודותסיכום – פעולות מלבן4פרויקט: חיית מחמד וירטואלית
הגדרת חיית המחמדהאכלת חיית המחמדתרגלו בעצמכם: קומפיילר Rust אונליין