Menu
Coddy logo textTech

המתודה expect

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

אף ש־.unwrap() עושה את העבודה, יש לו חיסרון משמעותי: כשהוא נכנס לפאניקה על None, הודעת השגיאה כללית ולא מועילה. כאן .expect() בא לעזרה.

השיטה .expect() פועלת בדיוק כמו .unwrap() — היא מחלצת את הערך מתוך Some ונכנסת לפאניקה במקרה של None. ההבדל העיקרי הוא ש-.expect() מאפשרת לך לספק הודעת פאניקה מותאמת אישית:

let maybe_score = Some(95);
let score = maybe_score.expect("Score should always be present");
println!("Your score is: {}", score);

אם ה־Option מכיל Some,‏ .expect() מחזירה את הערך הפנימי בדיוק כמו .unwrap(). אבל אם הוא None, במקום הודעת panic כללית, תופיע ההודעה המותאמת אישית שלך, וכך יהיה הרבה יותר קל להבין מה השתבש והיכן.

challenge icon

אתגר

קל

תקבלו שתי קלטים. הקלט הראשון הוא שם של מוצר, והקלט השני מציין אם המוצר נמצא במלאי (yes) או אזל מהמלאי (no). צרו Option<String> שמכיל Some(product_name) אם המוצר נמצא במלאי, או None אם הוא אזל מהמלאי. השתמשו ב-.expect() עם הודעה תיאורית כדי לחלץ את שם המוצר ולהדפיס אותו.

דרישות:

  • קראו את הקלט הראשון (שם המוצר) והסירו רווחים לבנים
  • קראו את הקלט השני (מצב המלאי) והסירו רווחים לבנים
  • צרו משתנה מסוג Option<String>:
    • אם מצב המלאי הוא yes, הקצו לו Some(product_name.to_string())
    • אם מצב המלאי הוא no, הקצו לו None
  • השתמשו ב-.expect() עם ההודעה "Product should be in stock" כדי לחלץ את שם המוצר
  • הדפיסו את שם המוצר שחולץ בפורמט: Product available: [product_name]

קלט:

  • השורה הראשונה: שם של מוצר (לדוגמה, Laptop)
  • השורה השנייה: yes או no

פלט:

  • אם מצב המלאי הוא yes: Product available: [product_name]
  • אם מצב המלאי הוא no: התוכנית תיכנס למצב panic עם ההודעה המותאמת אישית "Product should be in stock" (זו ההתנהגות הצפויה באתגר הזה)

הערה: כאשר מצב המלאי הוא no, קריאה ל-.expect() על None תגרום ל-panic עם ההודעה המותאמת אישית שלכם. כך מודגם כיצד .expect() מספק מידע מועיל יותר על השגיאה בהשוואה ל-.unwrap().

נסו בעצמכם

use std::io;

fn main() {
    // קרא את שם המוצר
    let mut product_name = String::new();
    io::stdin().read_line(&mut product_name).expect("Failed to read line");
    let product_name = product_name.trim();
    
    // קרא את מצב המלאי
    let mut stock_status = String::new();
    io::stdin().read_line(&mut stock_status).expect("Failed to read line");
    let stock_status = stock_status.trim();
    
    // TODO: כתוב את הקוד שלך למטה
    // צור Option<String> על סמך stock_status
    // השתמש ב-.expect() כדי לחלץ את שם המוצר
    // הדפס את התוצאה בפורמט: Product available: [product_name]
    
}
quiz iconבחנו את עצמכם

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

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

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