מבני טופל
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Rust של Coddy. שיעור 25 מתוך 66.
בעוד שמבנים רגילים משתמשים בשדות בעלי שמות, Rust מציעה סוג נוסף שנקרא מבני tuple. הם מאפשרים ליצור טיפוסים מותאמים אישית בצורה תמציתית יותר כשאין צורך לתת שם לכל שדה בנפרד.
מבנה tuple משלב את היתרונות של יצירת טיפוס חדש עם הפשטות של tuple. מגדירים אותו באמצעות מילת המפתח struct, ואחריה שם הטיפוס וסוגי השדות בסוגריים:
struct Color(i32, i32, i32);הדבר יוצר טיפוס Color שמכיל שלושה ערכי i32, המייצגים ערכי צבע RGB. בניגוד למבנים רגילים, לא מציינים שמות שדות — ניגשים לערכים לפי מיקומם, בדיוק כמו בטאפלים.
כדי ליצור מופע של מבנה מסוג tuple, מספקים ערכים בסוגריים עגולים:
let red = Color(255, 0, 0);אפשר לגשת לשדות בודדים באמצעות סימון נקודה עם האינדקס של השדה: red.0 נותן לך את הערך הראשון, red.1 את השני, וכן הלאה.
אתגר
קלתקבלו שלושה קלטים: ערך אדום (כמספר שלם), ערך ירוק (כמספר שלם) וערך כחול (כמספר שלם). הגדירו מבנה tuple בשם Color שמכיל שלושה ערכי i32 המייצגים את רכיבי צבע ה-RGB. צרו מופע של מבנה ה-tuple הזה באמצעות ערכי הקלט, ואז גשו לכל רכיב צבע והדפיסו אותו באמצעות סימון אינדקס.
דרישות:
- הגדירו מבנה tuple בשם
Colorעם שלושה שדות מסוגi32 - קראו את הקלט הראשון והמירו אותו ל-
i32עבור הערך האדום - קראו את הקלט השני והמירו אותו ל-
i32עבור הערך הירוק - קראו את הקלט השלישי והמירו אותו ל-
i32עבור הערך הכחול - צרו מופע של מבנה ה-tuple
Colorעם הערכים האלה - גשו לכל שדה באמצעות סימון נקודה עם האינדקסים (0, 1, 2) והדפיסו את פרטי הצבע בפורמט המדויק שמוצג להלן
קלט:
- שורה ראשונה: הערך האדום כמספר שלם (למשל,
255) - שורה שנייה: הערך הירוק כמספר שלם (למשל,
128) - שורה שלישית: הערך הכחול כמספר שלם (למשל,
0)
פלט:
- שורה ראשונה:
Red: [red_value] - שורה שנייה:
Green: [green_value] - שורה שלישית:
Blue: [blue_value]
נסו בעצמכם
use std::io;
// TODO: הגדירו כאן את מבנה ה-tuple בשם Color
fn main() {
// קראו את הערך של האדום
let mut red_input = String::new();
io::stdin().read_line(&mut red_input).expect("Failed to read line");
let red: i32 = red_input.trim().parse().expect("Invalid input");
// קראו את הערך של הירוק
let mut green_input = String::new();
io::stdin().read_line(&mut green_input).expect("Failed to read line");
let green: i32 = green_input.trim().parse().expect("Invalid input");
// קראו את הערך של הכחול
let mut blue_input = String::new();
io::stdin().read_line(&mut blue_input).expect("Failed to read line");
let blue: i32 = blue_input.trim().parse().expect("Invalid input");
// TODO: צרו מופע של מבנה ה-tuple בשם Color באמצעות ערכי הקלט
// TODO: גשו לכל רכיב צבע והדפיסו אותו באמצעות סימון אינדקס
// פורמט: Red: [value], Green: [value], Blue: [value]
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
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 אונליין