Menu
Coddy logo textTech

is_ok() ו-is_err()

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

לפעמים צריך לבדוק במהירות אם Result מייצג הצלחה או כישלון, בלי לחלץ את הערכים עצמם. Rust מספקת שתי שיטות נוחות לכך: .is_ok() ו־.is_err().

שתי השיטות מחזירות ערך בוליאני, ולכן הן מתאימות לבדיקות תנאי פשוטות. השיטה .is_ok() מחזירה true אם ה־Result הוא Ok, ו־false אם הוא Err. השיטה .is_err() פועלת באופן הפוך:

let success: Result = Ok(42);
let failure: Result = Err("Something went wrong");

if success.is_ok() {
    println!("Operation succeeded!");
}

if failure.is_err() {
    println!("Operation failed!");
}

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

challenge icon

אתגר

קל

יתקבלו שני קלטים. הקלט הראשון הוא מספר (כמחרוזת), והקלט השני הוא סימון מצב (success או failure). יש ליצור Result<i32, &'static str> על סמך המצב. אם המצב הוא success, יש ליצור Ok שמכיל את המספר שפוענח. אם המצב הוא failure, יש ליצור Err עם ההודעה "Operation failed". יש להשתמש ב-.is_ok() וב-.is_err() כדי לבדוק את מצב התוצאה ולהדפיס את ההודעה המתאימה.

דרישות:

  • יש לקרוא את הקלט הראשון (מספר) ולהסיר רווחים לבנים
  • יש לפענח את הקלט הראשון ל-i32
  • יש לקרוא את הקלט השני (מצב) ולהסיר רווחים לבנים
  • יש ליצור משתנה מסוג Result<i32, &'static str>:
    • אם המצב הוא success, יש להציב בו Ok(parsed_number)
    • אם המצב הוא failure, יש להציב בו Err("Operation failed")
  • יש להשתמש ב-.is_ok() כדי לבדוק אם התוצאה הצליחה:
    • אם כן, יש להדפיס: Success detected
  • יש להשתמש ב-.is_err() כדי לבדוק אם התוצאה היא שגיאה:
    • אם כן, יש להדפיס: Error detected

קלט:

  • שורה ראשונה: מספר (למשל, 42)
  • שורה שנייה: success או failure

פלט:

  • אם המצב הוא success: Success detected
  • אם המצב הוא failure: Error detected

נסו בעצמכם

use std::io;

fn main() {
    // קרא את הקלט הראשון (מספר)
    let mut number_input = String::new();
    io::stdin().read_line(&mut number_input).expect("Failed to read line");
    let number_input = number_input.trim();
    
    // המר את המספר ל-i32
    let parsed_number: i32 = number_input.parse().expect("Failed to parse number");
    
    // קרא את הקלט השני (status)
    let mut status = String::new();
    io::stdin().read_line(&mut status).expect("Failed to read line");
    let status = status.trim();
    
    // TODO: צור Result<i32, &'static str> בהתאם ל-status
    // אם status הוא "success", צור Ok(parsed_number)
    // אם status הוא "failure", צור Err("Operation failed")
    
    // TODO: השתמש ב-.is_ok() וב-.is_err() כדי לבדוק את התוצאה ולהדפיס את ההודעה המתאימה
}
quiz iconבחנו את עצמכם

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

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

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