הגדרת ברירת מחדל: 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(), כי התוכנית שלך לעולם לא תקרוס — תמיד תקבל ערך שאפשר להשתמש בו.
אתגר
קלתקבלו שני קלטים. הקלט הראשון הוא ציון (כמספר), והקלט השני מציין אם הציון זמין (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);
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1זרימת בקרה מתקדמת
ביטוי 'match'התאמה למספר ערכיםהתאמה לטווחיםביטוי 'if let'לולאות כביטוייםסיכום – מנתח פקודות פשוט4קיבוץ נתונים באמצעות מבנים
מהו מבנה?סקירה כללית על מבניםגישה לשדות במבנהמבנים הניתנים לשינוימבנים כפרמטרים של פונקציהמבני טופלסיכום – יצירת מבנה ספר7טיפול בשגיאות באמצעות 'Result'
מהו 'Result'?שימוש ב-'match' עם 'Result'is_ok() ו-is_err()קיצורי דרך: unwrap ו-expectאופרטור סימן השאלה '?'המרת מחרוזות למספריםסיכום - פונקציית חילוק בטוחה10Closures ופונקציות אנונימיות
מהו Closure?הגדרת Closure פשוטClosures עם פרמטריםלכידת הסביבהסיכום – Closure פשוט לחיבור2מבוא לווקטורים
מהו וקטור?יצירת וקטורהוספת איברים באמצעות pushגישה לאיברי וקטורמעבר על וקטורמעבר ניתן לשינויהסרת איבריםסיכום – מעקב בסיסי אחר ניקוד5זוגות מפתח-ערך באמצעות מפות גיבוב
מהי מפת גיבוב?יצירת מפת גיבובהוספת זוגות מפתח-ערךגישה לערכיםמעבר על מפת גיבובעדכון ערךהסרת זוגסיכום – מונה מילים6טיפול בהיעדר באמצעות 'Option'
מהו 'Option'?שימוש ב-'match' עם 'Option'is_some() ו-is_none()חילוץ ערך מתוך 'Option'המתודה expectהגדרת ברירת מחדל: unwrap_orסיכום – מציאת איברתרגלו בעצמכם: קומפיילר Rust אונליין