ארגומנטים בעלי שם
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 49 מתוך 70.
ארגומנטים בעלי שם מאפשרים לך לציין איזה פרמטר מקבל ערך באמצעות שמו, במקום להסתמך על המיקום. כך קריאות למתודות ברורות יותר, ואפשר להעביר ארגומנטים בכל סדר.
השתמש בשם הפרמטר ואחריו נקודתיים לפני הערך:
public static void CreateUser(string name, int age, bool isActive)
{
Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}
// שימוש בארגומנטים בעלי שם
CreateUser(name: "Alice", age: 25, isActive: true);
CreateUser(age: 30, isActive: false, name: "Bob"); // כל סדר אפשריארגומנטים בעלי שם בולטים במיוחד בשילוב עם פרמטרים אופציונליים. במקום לספק את כל הערכים האופציונליים הקודמים, אפשר לדלג ישירות לערך הדרוש לך:
public static void Configure(string host, int port = 8080, bool useSSL = false, int timeout = 30)
{
Console.WriteLine($"{host}:{port}, SSL: {useSSL}, Timeout: {timeout}");
}
// דלג על port ועל useSSL, וציין רק את timeout
Configure("localhost", timeout: 60);
Configure("server.com", useSSL: true);אפשר לשלב ארגומנטים מיקומיים וארגומנטים בעלי שם, אבל הארגומנטים המיקומיים חייבים להופיע קודם. ארגומנטים בעלי שם משפרים את הקריאות, במיוחד עבור מתודות עם כמה פרמטרים מאותו סוג או דגלים בוליאניים שמשמעותם אינה ברורה מהערך בלבד.
אתגר
קלבואו נבנה מחולל דוחות שמנצל ארגומנטים בעלי שם כדי להפוך קריאות למתודות לברורות לחלוטין. כאשר למתודות יש כמה פרמטרים — במיוחד פרמטרים מאותו סוג או דגלים בוליאניים — ארגומנטים בעלי שם הופכים את הקוד שלכם לתיעוד עצמי.
תארגנו את הקוד שלכם בשני קבצים:
ReportGenerator.cs: צרו מחלקה בשםReportGeneratorבמרחב השמותReports, ובה מתודה עם כמה פרמטרים אופציונליים:GenerateReport(string title, string author = "Anonymous", bool includeHeader = true, bool includeSummary = false, int maxPages = 10)- המתודה הזאת צריכה להחזיר מחרוזת מעוצבת שמתארת את תצורת הדוח
- פורמט:
Report: {title} by {author} | Header: {Yes/No}, Summary: {Yes/No}, Max Pages: {maxPages}
Program.cs: בקובץ הראשי שלכם, הדגימו את העוצמה של ארגומנטים בעלי שם על ידי קריאה ל־GenerateReportבדרכים שונות — דלגו על פרמטרים אופציונליים שאינכם צריכים וציינו רק את הפרמטרים החשובים לכל דוח.
תקבלו שלוש קלטים:
- כותרת הדוח הראשון
- כותרת הדוח השני
- כותרת הדוח השלישי
צרו שלושה דוחות עם תצורות שונות:
- הדוח הראשון: השתמשו בכותרת בלבד (כל ערכי ברירת המחדל חלים)
- הדוח השני: השתמשו בכותרת יחד עם
includeSummary: trueו־maxPages: 25(דלגו על author ועל includeHeader והשאירו את ערכי ברירת המחדל שלהם) - הדוח השלישי: השתמשו בכותרת יחד עם
author: "Admin",includeHeader: falseו־includeSummary: true(השאירו את ערך ברירת המחדל של maxPages)
הדפיסו את התוצאה של כל דוח בשורה נפרדת.
לדוגמה, אם הקלטים הם Sales Q1, Annual Review ו־Inventory Check, הפלט צריך להיות:
Report: Sales Q1 by Anonymous | Header: Yes, Summary: No, Max Pages: 10
Report: Annual Review by Anonymous | Header: Yes, Summary: Yes, Max Pages: 25
Report: Inventory Check by Admin | Header: No, Summary: Yes, Max Pages: 10שימו לב כיצד ארגומנטים בעלי שם מאפשרים לכם לדלג ישירות לפרמטרים החשובים לכם — אין צורך לציין את author או את includeHeader רק כדי לשנות את includeSummary. כך קריאות המתודות שלכם נעשות קריאות הרבה יותר ומבהירות את הכוונה!
נסו בעצמכם
using System;
using Reports;
class Program
{
public static void Main(string[] args)
{
// קראו את שלוש כותרות הדוחות
string title1 = Console.ReadLine();
string title2 = Console.ReadLine();
string title3 = Console.ReadLine();
// צרו מופע של ReportGenerator
ReportGenerator generator = new ReportGenerator();
// TODO: צרו את הדוח הראשון - השתמשו בכותרת בלבד (כל ערכי ברירת המחדל יחולו)
// TODO: צרו את הדוח השני - השתמשו בכותרת עם includeSummary: true ו-maxPages: 25
// (דלגו על author ועל includeHeader, והשאירו את ערכי ברירת המחדל שלהם)
// TODO: צרו את הדוח השלישי - השתמשו בכותרת עם author: "Admin", includeHeader: false ו-includeSummary: true
// (השאירו את ערך ברירת המחדל של maxPages)
// הדפיסו את התוצאה של כל דוח
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמרחבי שמות והנחיותמבוא למחלקות ולאובייקטיםמילת המפתח 'this'מתודות ופרמטריםשדות לעומת מאפייניםבנאיםאתחול אובייקטיםסיכום – מחשבון פשוט4ירושה
תחביר ירושה בסיסית (:)מילת המפתח 'base'מילות המפתח Virtual ו-Overrideמחלקות Sealedמחלקת הבסיס 'object'סיכום – היררכיית עובדים7תכונות מתקדמות
העמסת אופרטוריםאינדקסרים (this[])דריסת ToString()מתודות הרחבהסיכום – רשימה מותאמת אישית2מאפיינים וחברים סטטיים
מאפיינים במימוש אוטומטימאפיינים לקריאה בלבד ולכתיבה בלבדשדות ומתודות סטטייםמחלקות סטטיותחברים עם גוף ביטוי5פולימורפיזם וממשקים
פולימורפיזם בזמן קומפילציה לעומת בזמן ריצהממשק לעומת מחלקה מופשטתממשקים מרוביםממשקים מפורשיםהמרה כלפי מעלה והמרה כלפי מטהחזרה: מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה במקום ירושהGenerics (מחלקות ומתודות)נציגים ואירועיםמאפיינים ורפלקציהIDisposable והצהרת usingיסודות הזרקת תלויותתרגלו בעצמכם: קומפיילר C# אונליין