Menu
Coddy logo textTech

לכידת הסביבה

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Rust של Coddy. שיעור 62 מתוך 66.

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

כך פועל לכידת הסביבה:

fn main() {
    let x = 10;
    
    let my_closure = || {
        println!("The value of x is: {}", x);
    };
    
    my_closure(); // זה ידפיס "The value of x is: 10"
}

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

אפשר גם ללכוד משתנים ולהשתמש בהם בחישובים:

let multiplier = 3;
let multiply_by_three = |num| num * multiplier;
let result = multiply_by_three(5); // התוצאה היא 15
challenge icon

אתגר

קל

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

דרישות:

  • קראו את הקלט הראשון (מחיר בסיס) והסירו רווחים לבנים
  • נתחו אותו ל-f64
  • קראו את הקלט השני (אחוז הנחה) והסירו רווחים לבנים
  • נתחו אותו ל-f64
  • צרו closure שמקבל פרמטר אחד (מחיר הבסיס) ולוכד את אחוז ההנחה מהסביבה המקיפה
  • ה-closure צריך לחשב את המחיר הסופי באמצעות הנוסחה: base_price - (base_price * discount / 100.0)
  • קראו ל-closure עם מחיר הבסיס
  • הדפיסו את המחיר הסופי

קלט:

  • שורה ראשונה: מחיר בסיס (לדוגמה, 100.0)
  • שורה שנייה: אחוז הנחה (לדוגמה, 20.0)

פלט:

  • המחיר הסופי לאחר החלת ההנחה

נסו בעצמכם

use std::io;

fn main() {
    // קרא את המחיר הבסיסי
    let mut base_price_input = String::new();
    io::stdin().read_line(&mut base_price_input).expect("Failed to read line");
    let base_price: f64 = base_price_input.trim().parse().expect("Invalid number");
    
    // קרא את אחוז ההנחה
    let mut discount_input = String::new();
    io::stdin().read_line(&mut discount_input).expect("Failed to read line");
    let discount: f64 = discount_input.trim().parse().expect("Invalid number");
    
    // TODO: צור closure שלוכד את ההנחה ומחשב את המחיר הסופי
    // TODO: קרא ל-closure עם המחיר הבסיסי
    
    // הדפס את המחיר הסופי
    // println!("{}", final_price);
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

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