Menu
Coddy logo textTech

הפרמטר self

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

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

הסמל & פירושו שאנחנו שואלים את המופע במקום לקחת עליו בעלות. כך המתודה יכולה לקרוא את השדות של המבנה בלי לצרוך את המופע:

struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    fn area(&self) -> u32 {
        self.width * self.height
    }
    
    fn is_square(&self) -> bool {
        self.width == self.height
    }
}

בתוך גוף המתודה, self מאפשר לך לגשת לכל השדות של המבנה באמצעות תחביר נקודה. המתודה area קוראת גם את width וגם את height כדי לחשב ולהחזיר את התוצאה.

מכיוון ש-&self רק שואלת את המופע, אפשר לקרוא למספר מתודות באותו מבנה בלי שום בעיה:

fn main() {
    let rect = Rectangle { width: 10, height: 5 };
    
    println!("Area: {}", rect.area());      // 50
    println!("Square? {}", rect.is_square()); // false
}

מתודות המשתמשות ב־&self הן לקריאה בלבד. הן יכולות לבדוק את הנתונים של המבנה, אך אינן יכולות לשנות אותם. בשיעור הבא תלמדו כיצד ליצור מתודות שיכולות לשנות את המופע.

challenge icon

אתגר

קל

צרו מבנה Circle עם שדה יחיד: radius (f64).

הוסיפו בלוק מימוש עבור Circle עם שתי מתודות שמשתמשות ב-&self:

  • circumference: מחזירה את ההיקף כ-f64 (נוסחה: 2.0 * 3.14159 * radius)
  • diameter: מחזירה את הקוטר כ-f64 (נוסחה: 2.0 * radius)

תקבלו קלט אחד:

  • רדיוס המעגל (f64)

צרו מופע Circle עם הרדיוס שסופק, ואז הדפיסו את ההיקף ואת הקוטר בשורות נפרדות.

תבנית הפלט הצפויה:

{circumference}
{diameter}

נסו בעצמכם

use std::io;

// TODO: הגדירו כאן את ה-struct של Circle


// TODO: הוסיפו בלוק מימוש עבור Circle עם המתודות circumference ו-diameter


fn main() {
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let radius: f64 = input.trim().parse().expect("Invalid number");
    
    // TODO: צרו מופע של Circle והדפיסו את ההיקף והקוטר
    
}
quiz iconבחנו את עצמכם

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

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

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