Menu
Coddy logo textTech

מהו Trait?

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

טיפוסים גנריים מאפשרים לך לכתוב קוד שעובד עם כל טיפוס, אבל לפעמים צריך להבטיח שטיפוס יוכל לעשות משהו מסוים. כאן נכנסות לתמונה תכונות.

תכונה מגדירה קבוצה של מתודות שסוג חייב לממש. חשבו עליה כחוזה: כל סוג ש״חותם״ על החוזה הזה מתחייב לספק את ההתנהגות שצוינה. אם השתמשתם בממשקים בשפות אחרות, תכונות ממלאות תפקיד דומה.

כך מגדירים תכונה:

trait Describable {
    fn describe(&self) -> String;
}

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

תכונת Describable הזו אומרת: "כל טיפוס שמממש אותי חייב לספק מתודת describe שמקבלת הפניה לעצמו ומחזירה String." לתכונה לא משנה איך המתודה פועלת: הדבר נתון לבחירתו של כל טיפוס שמממש אותה.

תכונות נעשות עוצמתיות כאשר כמה סוגים שונים מממשים את אותה תכונה. Book, Car ו-Person יכולים כולם להיות Describable, וכל אחד מהם מספק תיאור ייחודי משלו. התכונה מבטיחה שלכולם תהיה היכולת המשותפת הזו.

challenge icon

אתגר

קל

בואו נגדיר את ה-trait הראשון שלך! Trait מגדיר חוזה: הבטחה שכל טיפוס שמממש אותו יספק התנהגות מסוימת. תיצור trait בשם Summarizable שסוגים שונים יכולים לממש כדי לספק סיכום של עצמם.

תארגן את הקוד שלך בשני קבצים:

  • summary.rs: הגדר trait ציבורי בשם Summarizable עם חתימת מתודה אחת: summarize(&self) -> String. זכור, בהגדרת trait מצהירים רק על חתימת המתודה ומסיימים אותה בנקודה-פסיק: ללא גוף. כך אומרים ל-Rust "כל טיפוס שמממש את ה-trait הזה חייב לספק מתודת summarize שמחזירה String."
  • main.rs: טען את מודול הסיכום שלך והדפס הודעה המאשרת שה-trait שלך הוגדר. מכיוון שעדיין לא למדנו כיצד לממש traits (זה השיעור הבא!), פשוט תוודא שה-trait שלך מתקמפל כראוי.

בקובץ הראשי שלך, הדפס את ההודעה הבאה כדי לאשר שהגדרת ה-trait שלך תקינה:

Summarizable trait defined successfully!

האתגר הזה מתמקד אך ורק בתחביר של הגדרת trait: מילת המפתח trait, שם ה-trait והצהרה על חתימות של מתודות ללא מימושים. בשיעור הבא תלמד כיצד לגרום למבנים לממש את ה-trait הזה!

נסו בעצמכם

mod summary;

fn main() {
    // TODO: הדפס את הודעת האישור שה-trait מוגדר
    // פלט צפוי: "Summarizable trait defined successfully!"
    
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

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

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