Closures עם פרמטרים
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Rust של Coddy. שיעור 61 מתוך 66.
אף שסגירות שאינן מקבלות פרמטרים שימושיות, ברוב המקרים תרצו להעביר נתונים לסגירות שלכם כדי להפוך אותן לגמישות וחזקות יותר. הוספת פרמטרים לסגירות נעשית לפי אותו דפוס שלמדתם קודם, אך עם ערכים בתוך הקווים האנכיים.
כך מגדירים סגירה שמקבלת פרמטר אחד:
let add_one = |x: i32| x + 1;שימו לב שהפרמטר x נמצא בין הקווים האנכיים, בדיוק כמו פרמטרים של פונקציה. לאחר מכן תוכלו לקרוא לסגירה הזו על ידי העברת ערך:
let add_one = |x: i32| x + 1;
let result = add_one(5); // הערך של result הוא 6עבור סגירות עם כמה פרמטרים, הפרד ביניהם באמצעות פסיקים:
let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // הערך של result הוא 12אתגר
קלתקבל שני קלטים. הקלט הראשון הוא מספר, וגם הקלט השני הוא מספר. צור סגירה שמקבלת שני פרמטרים ומחשבת חזקה (הפרמטר הראשון בחזקת הפרמטר השני). שמור את הסגירה במשתנה, קרא לה עם ערכי הקלט והדפס את התוצאה.
דרישות:
- קרא את הקלט הראשון (מספר הבסיס) והסר ממנו רווחים לבנים
- נתח אותו ל־
i32 - קרא את הקלט השני (מעריך) והסר ממנו רווחים לבנים
- נתח אותו ל־
u32 - צור סגירה עם שני פרמטרים שמחשבת חזקה באמצעות המתודה
.pow() - שמור את הסגירה במשתנה
- קרא לסגירה עם שני ערכי הקלט
- הדפס את התוצאה
קלט:
- שורה ראשונה: מספר בסיס (למשל,
2) - שורה שנייה: מעריך (למשל,
3)
פלט:
- תוצאת חישוב החזקה
נסו בעצמכם
use std::io;
fn main() {
// קרא את הקלט הראשון (מספר הבסיס)
let mut base_input = String::new();
io::stdin().read_line(&mut base_input).expect("Failed to read line");
let base: i32 = base_input.trim().parse().expect("Invalid number");
// קרא את הקלט השני (המעריך)
let mut exp_input = String::new();
io::stdin().read_line(&mut exp_input).expect("Failed to read line");
let exponent: u32 = exp_input.trim().parse().expect("Invalid number");
// TODO: צור פונקציה אנונימית שמחשבת את החזקה ושמור אותה במשתנה
// TODO: קרא לפונקציה האנונימית עם base ו-exponent
// הדפס את התוצאה
println!("{}", result);
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1זרימת בקרה מתקדמת
ביטוי 'match'התאמה למספר ערכיםהתאמה לטווחיםביטוי 'if let'לולאות כביטוייםסיכום – מנתח פקודות פשוט4קיבוץ נתונים באמצעות מבנים
מהו מבנה?סקירה כללית על מבניםגישה לשדות במבנהמבנים הניתנים לשינוימבנים כפרמטרים של פונקציהמבני טופלסיכום – יצירת מבנה ספר7טיפול בשגיאות באמצעות 'Result'
מהו 'Result'?שימוש ב-'match' עם 'Result'is_ok() ו-is_err()קיצורי דרך: unwrap ו-expectאופרטור סימן השאלה '?'המרת מחרוזות למספריםסיכום - פונקציית חילוק בטוחה10Closures ופונקציות אנונימיות
מהו Closure?הגדרת Closure פשוטClosures עם פרמטריםלכידת הסביבהסיכום – Closure פשוט לחיבור2מבוא לווקטורים
מהו וקטור?יצירת וקטורהוספת איברים באמצעות pushגישה לאיברי וקטורמעבר על וקטורמעבר ניתן לשינויהסרת איבריםסיכום – מעקב בסיסי אחר ניקוד5זוגות מפתח-ערך באמצעות מפות גיבוב
מהי מפת גיבוב?יצירת מפת גיבובהוספת זוגות מפתח-ערךגישה לערכיםמעבר על מפת גיבובעדכון ערךהסרת זוגסיכום – מונה מיליםתרגלו בעצמכם: קומפיילר Rust אונליין