מבנים כפרמטרים של פונקציה
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Rust של Coddy. שיעור 24 מתוך 66.
עכשיו, כשאתה יודע ליצור ולשנות מבנים, בוא נחקור איך להשתמש בהם עם פונקציות. כמו כל סוג נתונים אחר ב-Rust, אפשר להעביר מופעים של מבנים לפונקציות ולהחזיר אותם מפונקציות.
כדי להעביר מבנה לפונקציה, פשוט כוללים אותו כפרמטר בהגדרת הפונקציה:
fn calculate_area(rect: Rectangle) -> i32 {
rect.width * rect.height
}הפונקציה הזו מקבלת מבנה Rectangle כפרמטר ומחזירה i32. בתוך הפונקציה אפשר לגשת לשדות של המבנה באמצעות סימון נקודה, בדיוק כמו בכל מקום אחר.
אפשר גם להחזיר מבנים מפונקציות באמצעות ציון סוג המבנה כסוג ההחזרה:
fn create_square(size: i32) -> Rectangle {
Rectangle {
width: size,
height: size,
}
}שימוש במבנים עם פונקציות הופך את הקוד שלך למסודר ומשמעותי יותר. במקום להעביר כמה פרמטרים נפרדים, אפשר לקבץ יחד נתונים קשורים ולהעביר אותם כיחידה אחת מוגדרת היטב.
אתגר
קלתקבלו ארבעה קלטים: רוחב של מלבן (כמספר שלם), גובה של מלבן (כמספר שלם), אורך צלע של ריבוע (כמספר שלם) ומספר בחירה (1 או 2). הגדירו מבנה Rectangle עם שני שדות: width: i32 ו-height: i32. צרו שתי פונקציות: אחת שמקבלת Rectangle ומחשבת את השטח שלו, ואחרת שמקבלת אורך צלע ומחזירה Rectangle שמייצג ריבוע. חשבו והדפיסו את השטח המתאים בהתאם לקלט הבחירה.
דרישות:
- הגדירו מבנה
Rectangleעם השדות:width: i32ו-height: i32 - צרו פונקציה
calculate_areaשמקבלתRectangleכפרמטר ומחזירהi32(השטח) - צרו פונקציה
create_squareשמקבלתi32(אורך צלע) כפרמטר ומחזירהRectangleשבו הרוחב והגובה שווים - קראו את הקלט הראשון והמירו אותו ל-
i32עבור רוחב המלבן - קראו את הקלט השני והמירו אותו ל-
i32עבור גובה המלבן - צרו מופע של
Rectangleעם המידות האלה - קראו את הקלט השלישי והמירו אותו ל-
i32עבור אורך צלע הריבוע - קראו את הקלט הרביעי והמירו אותו ל-
i32עבור הבחירה (1 או 2) - אם הבחירה היא 1: חשבו והדפיסו את שטח המלבן
- אם הבחירה היא 2: צרו ריבוע באמצעות
create_square, ואז חשבו והדפיסו את השטח שלו
קלט:
- שורה ראשונה: רוחב המלבן כמספר שלם (לדוגמה,
8) - שורה שנייה: גובה המלבן כמספר שלם (לדוגמה,
5) - שורה שלישית: אורך צלע הריבוע כמספר שלם (לדוגמה,
6) - שורה רביעית: בחירה כמספר שלם, 1 או 2 (לדוגמה,
1)
פלט:
- אם הבחירה היא 1:
Rectangle area: [area] - אם הבחירה היא 2:
Square area: [area]
נסו בעצמכם
use std::io;
// TODO: הגדירו כאן את המבנה Rectangle
// TODO: הגדירו כאן את הפונקציה calculate_area
// TODO: הגדירו כאן את הפונקציה create_square
fn main() {
// קראו את רוחב המלבן
let mut width_input = String::new();
io::stdin().read_line(&mut width_input).expect("Failed to read line");
let width: i32 = width_input.trim().parse().expect("Invalid input");
// קראו את גובה המלבן
let mut height_input = String::new();
io::stdin().read_line(&mut height_input).expect("Failed to read line");
let height: i32 = height_input.trim().parse().expect("Invalid input");
// קראו את אורך צלע הריבוע
let mut side_input = String::new();
io::stdin().read_line(&mut side_input).expect("Failed to read line");
let side: i32 = side_input.trim().parse().expect("Invalid input");
// קראו את הבחירה
let mut choice_input = String::new();
io::stdin().read_line(&mut choice_input).expect("Failed to read line");
let choice: i32 = choice_input.trim().parse().expect("Invalid input");
// TODO: כתבו את הקוד שלכם למטה
// צרו מופע של Rectangle, בדקו את הבחירה וחשבו את השטח המתאים
// הדפיסו את התוצאה בהתאם לבחירה
// השתמשו ב: println!("Rectangle area: {}", area); או println!("Square area: {}", area);
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
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 אונליין