Menu
Coddy logo textTech

מילת המפתח 'params'

חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 47 מתוך 70.

מילת המפתח params מאפשרת למתודה לקבל מספר משתנה של ארגומנטים מאותו סוג. במקום לדרוש מהקוראים ליצור מערך באופן ידני, הם יכולים להעביר ארגומנטים ישירות, כשהם מופרדים בפסיקים.

הצב את params לפני פרמטר מערך בחתימת המתודה:

public static int Sum(params int[] numbers)
{
    int total = 0;
    foreach (int n in numbers)
        total += n;
    return total;
}

// כל הקריאות האלה פועלות
Console.WriteLine(Sum(1, 2));           // 3
Console.WriteLine(Sum(1, 2, 3, 4, 5));  // 15
Console.WriteLine(Sum());               // 0 (מערך ריק)

המהדר עוטף את הארגומנטים באופן אוטומטי במערך. אפשר גם להעביר מערך קיים ישירות, אם כבר יש לך כזה:

int[] values = { 10, 20, 30 };
Console.WriteLine(Sum(values));  // 60

יש כמה כללים שכדאי לזכור: למתודה יכול להיות רק פרמטר params אחד, והוא חייב להיות הפרמטר האחרון ברשימה. אפשר לשלב אותו עם פרמטרים רגילים:

public static void Log(string prefix, params object[] items)
{
    foreach (var item in items)
        Console.WriteLine(prefix + item);
}

Log("Item: ", "Apple", 42, true);

מילת המפתח params הופכת ממשקי API לגמישים יותר וידידותיים יותר למי שקורא להם, ולכן אפשר לראות אותה במתודות כמו Console.WriteLine ו-string.Format.

challenge icon

אתגר

קל

בואו נבנה מעצב הודעות גמיש שמשתמש במילת המפתח params כדי לטפל בכל מספר של ערכים. תיצרו מחלקת שירות שיכולה לעצב הודעות עם ארגומנטים משתנים, ותראו כיצד params הופכת מתודות לרב-תכליתיות יותר ונוחות יותר למי שקורא להן.

תארגנו את הקוד שלכם בשני קבצים:

  • MessageFormatter.cs: צרו מחלקה בשם MessageFormatter במרחב השמות Formatting, ובה שתי מתודות שמשתמשות ב-params:
    • Combine(params string[] parts) - מחברת את כל המחרוזות שסופקו, עם רווח ביניהן, ומחזירה את התוצאה
    • FormatList(string label, params int[] numbers) - משלבת פרמטר רגיל עם מערך params. עליה להחזיר את התווית ואחריה נקודתיים, ואז את כל המספרים כשהם מופרדים בפסיקים (לדוגמה, Scores: 85, 90, 78)
  • Program.cs: בקובץ הראשי שלכם, הדגימו את שתי המתודות עם קלטים. קראו מחרוזת תווית, ואז קראו שורה של מספרים שלמים המופרדים בפסיקים. השתמשו ב-Combine כדי לחבר שלוש מילים קבועות, והשתמשו ב-FormatList כדי להציג את התווית עם המספרים.

תקבלו שני קלטים:

  • מחרוזת תווית (לדוגמה, Scores)
  • רשימה של מספרים שלמים המופרדים בפסיקים (לדוגמה, 85,90,78,92)

תחילה, קראו ל-Combine עם המילים "Hello", "params" ו-"world!" והדפיסו את התוצאה. לאחר מכן, נתחו את המספרים השלמים המופרדים בפסיקים למערך וקראו ל-FormatList עם התווית ועם מערך המספרים השלמים, והדפיסו גם את התוצאה הזאת.

לדוגמה, אם הקלטים הם Scores ו-85,90,78, הפלט צריך להיות:

Hello params world!
Scores: 85, 90, 78

שימו לב ש-Combine מקבלת ישירות כל מספר של מחרוזות, ואילו FormatList מראה שאפשר לשלב פרמטרים רגילים עם params — פרמטר ה-params רק צריך להופיע אחרון. אפשר גם להעביר מערך קיים למתודה שמשתמשת ב-params, וזה בדיוק מה שתעשו עם המספרים השלמים שנותחו!

נסו בעצמכם

using System;
using Formatting;

class Program
{
    public static void Main(string[] args)
    {
        // קראו את הקלטים
        string label = Console.ReadLine();
        string numbersInput = Console.ReadLine();
        
        // TODO: השתמשו ב-MessageFormatter.Combine עם "Hello", "params" ו-"world!"
        // והדפיסו את התוצאה
        
        
        // TODO: פענחו את המספרים השלמים המופרדים בפסיקים למערך int
        // רמז: פצלו את המחרוזת והמירו כל חלק ל-int
        
        
        // TODO: השתמשו ב-MessageFormatter.FormatList עם label ועם מערך int
        // והדפיסו את התוצאה
        
    }
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה תכנות מונחה עצמים

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