Menu
Coddy logo textTech

מקטעים כפרמטרים לפונקציות

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

בעת כתיבת פונקציות שעובדות עם מחרוזות, שימוש ב-&str כסוג של פרמטר במקום ב-String הופך את הפונקציות שלך לגמישות ושימושיות הרבה יותר.

פונקציה שמקבלת פרמטר מסוג String יכולה לקבל רק מחרוזות בבעלותה, דבר שמגביל את האופן שבו אפשר לקרוא לה:

fn print_message(text: String) {
    println!("{}", text);
}

// זה עובד, אבל מעביר את הבעלות
let my_string = String::from("Hello");
print_message(my_string); // לא ניתן עוד להשתמש ב-my_string לאחר מכן

עם זאת, פונקציה שמקבלת &str יכולה לקבל גם הפניות ל־String וגם מחרוזות מילוליות, ולכן היא הרבה יותר רב־תכליתית:

fn print_message(text: &str) {
    println!("{}", text);
}

// עכשיו אפשר לקרוא לה עם כל אחד משני הטיפוסים
let my_string = String::from("Hello");
print_message(&my_string); // העבירו הפניה ל-String
print_message("World");     // העבירו מחרוזת מילולית ישירות

הגמישות הזאת פירושה שהפונקציות שלך פועלות במצבים רבים יותר, בלי לאלץ את מי שקוראים להן להמיר את הנתונים שלהם או לוותר על הבעלות עליהם.

challenge icon

אתגר

קל

תקבלו שתי קלטים. הקלט הראשון הוא הודעת טקסט, והקלט השני הוא האורך המרבי המותר להודעה. צרו פונקציה בשם truncate_message שמקבלת פרוסת מחרוזת (&str) ואורך מרבי (usize) כפרמטרים. אם אורך ההודעה עולה על האורך המרבי, הפונקציה צריכה להחזיר פרוסה של ההודעה עד לאורך המרבי. אחרת, עליה להחזיר את ההודעה כולה. הדפיסו את התוצאה.

דרישות:

  • קראו את הקלט הראשון (הודעת הטקסט) והסירו רווחים לבנים
  • קראו את הקלט השני (האורך המרבי) והסירו רווחים לבנים
  • נתחו את האורך המרבי ל-usize
  • הגדירו פונקציה truncate_message שמקבלת שני פרמטרים:
    • פרוסת מחרוזת &str עבור ההודעה
    • usize עבור האורך המרבי
  • בתוך הפונקציה, בדקו אם אורך ההודעה גדול מהאורך המרבי
  • אם כן, החזירו פרוסה של ההודעה מהאינדקס 0 ועד האורך המרבי באמצעות &message[0..max_len]
  • אם לא, החזירו את ההודעה כולה
  • קראו לפונקציה עם הודעת הקלט והאורך המרבי
  • הדפיסו את התוצאה שהוחזרה

קלט:

  • שורה ראשונה: הודעת טקסט (לדוגמה, Hello World from Rust)
  • שורה שנייה: אורך מרבי כמספר (לדוגמה, 11)

פלט:

  • ההודעה המקוצרת אם היא חורגת מהאורך המרבי, או ההודעה המלאה אחרת

נסו בעצמכם

use std::io;

// TODO: הגדירו כאן את הפונקציה truncate_message


fn main() {
    // קראו את הודעת הטקסט
    let mut message = String::new();
    io::stdin().read_line(&mut message).expect("Failed to read line");
    let message = message.trim();
    
    // קראו את האורך המרבי
    let mut max_length_input = String::new();
    io::stdin().read_line(&mut max_length_input).expect("Failed to read line");
    let max_len: usize = max_length_input.trim().parse().expect("Invalid number");
    
    // TODO: קראו לפונקציה truncate_message ושמרו את התוצאה
    
    // TODO: הדפיסו את התוצאה
}
quiz iconבחנו את עצמכם

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

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

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