Menu
Coddy logo textTech

שימוש ב-'match' עם 'Result'

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

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

בדומה ל־Option, match מחייבת אותך לטפל בשתי הגרסאות של Result. יוצרים זרוע אחת עבור Ok כדי לטפל בהצלחה, וזרוע נוספת עבור Err כדי לטפל בכישלון:

let result = divide(10, 2);

match result {
    Ok(value) => println!("Division successful: {}", value),
    Err(error) => println!("Division failed: {}", error),
}

כאשר ה־Result הוא Ok, ה־match מחלץ את הערך שהתקבל בהצלחה ומבצע את הזרוע הראשונה. כאשר הוא Err, הוא מחלץ את פרטי השגיאה ומבצע את הזרוע השנייה. התבנית הזו מבטיחה שלא תתעלם בטעות משגיאה אפשרית.

challenge icon

אתגר

קל

יתקבלו שתי קלטים. הקלט הראשון הוא מספר ( כמחרוזת), והקלט השני הוא מספר נוסף (כמחרוזת). צרו פונקציה שמנסה לחלק את המספר הראשון במספר השני ומחזירה Result<f64, &'static str>. אם המספר השני הוא אפס, החזירו Err עם ההודעה "Division by zero". אחרת, החזירו Ok עם תוצאת החלוקה. השתמשו בביטוי match כדי לטפל במקרים של Ok ושל Err, ולהדפיס את ההודעה המתאימה.

דרישות:

  • קראו את הקלט הראשון (מחולק) והסירו רווחים לבנים
  • נתחו את הקלט הראשון ל-f64
  • קראו את הקלט השני (מחלק) והסירו רווחים לבנים
  • נתחו את הקלט השני ל-f64
  • צרו פונקציה שמקבלת שני פרמטרים מסוג f64 ומחזירה Result<f64, &'static str>
  • בתוך הפונקציה, בדקו אם המחלק הוא 0.0:
    • אם כן, החזירו Err("Division by zero")
    • אם לא, החזירו Ok(dividend / divisor)
  • קראו לפונקציה עם שני המספרים שנותחו
  • השתמשו בביטוי match כדי לטפל ב-Result
  • בזרוע Ok(value), הדפיסו: Result: [value]
  • בזרוע Err(error), הדפיסו: Error: [error]

קלט:

  • שורה ראשונה: מספר שמייצג את המחולק (לדוגמה, 10.0)
  • שורה שנייה: מספר שמייצג את המחלק (לדוגמה, 2.0)

פלט:

  • אם החלוקה מצליחה: Result: [result]
  • אם מתבצעת חלוקה באפס: Error: Division by zero
REQUIRED OUTPUT FORMAT: [Your translated content here]

נסו בעצמכם

use std::io;

// TODO: צרו כאן את הפונקציה divide שמחזירה Result<f64, &'static str>


fn main() {
    // קראו את הקלט הראשון (המספר המחולק)
    let mut dividend_input = String::new();
    io::stdin().read_line(&mut dividend_input).expect("Failed to read line");
    let dividend: f64 = dividend_input.trim().parse().expect("Invalid number");
    
    // קראו את הקלט השני (המחלק)
    let mut divisor_input = String::new();
    io::stdin().read_line(&mut divisor_input).expect("Failed to read line");
    let divisor: f64 = divisor_input.trim().parse().expect("Invalid number");
    
    // TODO: קראו לפונקציה divide והשתמשו ב-match כדי לטפל ב-Result
    // הדפיסו "Result: [value]" במקרה של Ok
    // הדפיסו "Error: [error]" במקרה של Err
}
quiz iconבחנו את עצמכם

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

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

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