Menu
Coddy logo textTech

הגדרת ברירת מחדל: unwrap_or

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

אף ש־.unwrap() ו־.expect() יכולים לחלץ ערכים מתוך Option, יש לשניהם חיסרון משמעותי: הם גורמים ל־panic כשהם נתקלים ב־None. כדי לכתוב קוד בטוח יותר, Rust מספקת את .unwrap_or() — מתודה שאף פעם לא גורמת ל־panic.

המתודה .unwrap_or() מקבלת ערך ברירת מחדל כארגומנט. אם ה-Option מכיל Some, היא מחזירה את הערך הפנימי. אם הוא None, היא מחזירה את ערך ברירת המחדל שסיפקת:

let maybe_score = Some(85);
let score = maybe_score.unwrap_or(0);
println!("Score: {}", score); // מדפיס: Score: 85

let no_score: Option = None;
let default_score = no_score.unwrap_or(0);
println!("Score: {}", default_score); // מדפיס: Score: 0

הגישה הזאת בטוחה הרבה יותר מ־.unwrap(), כי התוכנית שלך לעולם לא תקרוס — תמיד תקבל ערך שאפשר להשתמש בו.

challenge icon

אתגר

קל

תקבלו שני קלטים. הקלט הראשון הוא ציון (כמספר), והקלט השני מציין אם הציון זמין (yes) או חסר (no). צרו Option<i32> על סמך מצב הזמינות. השתמשו ב-.unwrap_or() כדי לחלץ את הציון בבטחה עם ערך ברירת מחדל של 50, ולאחר מכן הדפיסו את הציון הסופי.

דרישות:

  • קראו את הקלט הראשון (ציון) והסירו רווחים מסביב
  • נתחו את הקלט הראשון בתור i32
  • קראו את הקלט השני (מצב הזמינות) והסירו רווחים מסביב
  • צרו משתנה מסוג Option<i32>:
    • אם מצב הזמינות הוא yes, הקצו Some(score)
    • אם מצב הזמינות הוא no, הקצו None
  • השתמשו ב-.unwrap_or(50) כדי לחלץ את הציון עם ערך ברירת מחדל של 50
  • הדפיסו את הציון הסופי בפורמט: Final score: [score]

קלט:

  • שורה ראשונה: מספר המייצג את הציון (לדוגמה, 85)
  • שורה שנייה: yes או no

פלט:

  • אם מצב הזמינות הוא yes: Final score: [score] (הציון בפועל)
  • אם מצב הזמינות הוא no: Final score: 50 (ערך ברירת המחדל)

נסו בעצמכם

use std::io;

fn main() {
    // קראו את הניקוד
    let mut score_input = String::new();
    io::stdin().read_line(&mut score_input).expect("Failed to read line");
    let score: i32 = score_input.trim().parse().expect("Invalid number");
    
    // קראו את מצב הזמינות
    let mut availability = String::new();
    io::stdin().read_line(&mut availability).expect("Failed to read line");
    let availability = availability.trim();
    
    // TODO: כתבו את הקוד שלכם למטה
    // צרו Option<i32> על סמך מצב הזמינות
    // השתמשו ב־.unwrap_or(50) כדי לקבל את הניקוד הסופי
    
    
    // הדפיסו את התוצאה
    println!("Final score: {}", final_score);
}
quiz iconבחנו את עצמכם

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

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

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