Menu
Coddy logo textTech

פרמטרים אופציונליים

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

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

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

public static void Greet(string name, string greeting = "Hello")
{
    Console.WriteLine(greeting + ", " + name + "!");
}

// שתי הקריאות פועלות
Greet("Alice");              // Hello, Alice!
Greet("Bob", "Welcome");     // Welcome, Bob!

פרמטרים אופציונליים חייבים להופיע אחרי כל הפרמטרים הנדרשים. אפשר להגדיר כמה פרמטרים אופציונליים, והקוראים לפונקציה יכולים להשמיט כל אחד מהם מהסוף:

public static void CreateUser(string name, int age = 0, bool isActive = true)
{
    Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}

CreateUser("Emma");                    // Emma, גיל: 0, פעיל: True
CreateUser("James", 25);               // James, גיל: 25, פעיל: True
CreateUser("Sarah", 30, false);        // Sarah, גיל: 30, פעיל: False

ערכי ברירת מחדל חייבים להיות קבועים בזמן הידור — ערכים מילוליים, ערכי const או ביטויי default. אי אפשר להשתמש במשתנים או בקריאות למתודות כערכי ברירת מחדל. לכן פרמטרים אופציונליים מתאימים במיוחד להגדרות תצורה ולמתודות שבהן רוב הקוראים משתמשים בערכים נפוצים.

challenge icon

אתגר

קל

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

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

  • NotificationService.cs: צרו מחלקה בשם NotificationService במרחב השמות Notifications, ובה מתודה שמדגימה שימוש בפרמטרים אופציונליים:
    • SendNotification(string message, string priority = "Normal", bool addTimestamp = true) - המתודה צריכה להחזיר מחרוזת התראה מעוצבת. כאשר addTimestamp הוא true, הוסיפו את [TIMESTAMP] לפני ההודעה. הפורמט צריך להיות: [Priority] Message או [TIMESTAMP] [Priority] Message, בהתאם להגדרת חותמת הזמן.
  • Program.cs: בקובץ הראשי, הדגימו כיצד פועלים פרמטרים אופציונליים באמצעות קריאה ל-SendNotification בשלוש דרכים שונות — שימוש בכל ערכי ברירת המחדל, שינוי פרמטר אחד ושינוי שני הפרמטרים האופציונליים.

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

  • ההודעה הראשונה (תשתמש בכל ערכי ברירת המחדל)
  • ההודעה השנייה (תשתמש בעדיפות "Urgent" ובחותמת הזמן שמוגדרת כברירת מחדל)
  • ההודעה השלישית (תשתמש בעדיפות "Low" וללא חותמת זמן)

קראו ל-SendNotification שלוש פעמים והדפיסו כל תוצאה:

  1. הקריאה הראשונה: העבירו רק את ההודעה הראשונה (תשתמש בערכי ברירת המחדל: עדיפות "Normal", חותמת זמן מופעלת)
  2. הקריאה השנייה: העבירו את ההודעה השנייה עם עדיפות "Urgent" (חותמת הזמן עדיין מוגדרת כברירת מחדל ל-true)
  3. הקריאה השלישית: העבירו את ההודעה השלישית עם עדיפות "Low" ואת false עבור חותמת הזמן

לדוגמה, אם הקלט הוא System started, Server overload ו-Cache cleared, הפלט צריך להיות:

[TIMESTAMP] [Normal] System started
[TIMESTAMP] [Urgent] Server overload
[Low] Cache cleared

שימו לב כיצד אותה מתודה מטפלת בקלות בכל שלושת התרחישים — הקוראים לה מציינים רק את מה שהם רוצים לשנות מערכי ברירת המחדל!

נסו בעצמכם

using System;
using Notifications;

class Program
{
    public static void Main(string[] args)
    {
        // קראו את שלוש ההודעות
        string message1 = Console.ReadLine();
        string message2 = Console.ReadLine();
        string message3 = Console.ReadLine();

        // צרו מופע של NotificationService
        NotificationService service = new NotificationService();

        // TODO: קראו ל-SendNotification שלוש פעמים והדפיסו כל תוצאה:
        // 1. קריאה ראשונה: העבירו רק את message1 (נעשה שימוש בכל ערכי ברירת המחדל)
        // 2. קריאה שנייה: העבירו את message2 עם עדיפות "Urgent" (ערך ברירת המחדל של timestamp הוא true)
        // 3. קריאה שלישית: העבירו את message3 עם עדיפות "Low" ואת false עבור timestamp

    }
}
quiz iconבחנו את עצמכם

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

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

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