تمرين - أساليب ذات معلمات اختيارية
تسمح لغة C Sharp باستخدام المعلمات المسماة والاختيارية. تتيح لك هذه الأنواع من المعلمات تحديد الوسيطات التي تريد توفيرها للأسلوب، لذلك لا تقتصر على البنية المعرفة في توقيع الأسلوب.
تسمح لك الوسيطات المسماة بتحديد قيمة معلمة باستخدام اسمها بدلا من موضعها. تسمح لك المعلمات الاختيارية بحذف هذه الوسيطات عند استدعاء الأسلوب .
في هذا التمرين، ستتعلم كيفية استخدام كل من المعلمات المسماة والاختيارية.
إنشاء تطبيق RSVP
في هذه المهمة، ستقوم بإنشاء تطبيق مختصر للضيوف إلى RSVP إلى حدث. سيقوم الضيوف بتوفير حجم الحفلة وأي حساسية. ستضيف أيضا خيار تقييد RSVPs إلى قائمة ضيوف دعوة فقط.
في محرر Visual Studio Code، احذف أي تعليمة برمجية موجودة من التدريبات السابقة.
اكتب التعليمات البرمجية التالية في محرر Visual Studio Code:
string[] guestList = {"Rebecca", "Nadia", "Noor", "Jonte"}; string[] rsvps = new string[10]; int count = 0; void RSVP(string name, int partySize, string allergies, bool inviteOnly) { if (inviteOnly) { // search guestList before adding rsvp } rsvps[count] = $"Name: {name}, \tParty Size: {partySize}, \tAllergies: {allergies}"; count++; } void ShowRSVPs() { Console.WriteLine("\nTotal RSVPs:"); for (int i = 0; i < count; i++) { Console.WriteLine(rsvps[i]); } }في هذه التعليمات البرمجية، يمكنك إنشاء متغيرات لتخزين قائمة الضيوف وrsvps. يقوم
RSVPالأسلوب بإلحاق معلومات الضيف بالقائمة، ويعرضShowRSVPsالأسلوب إجمالي RSVPs باستخدام تسلسل إلغاء علامة التبويب لفصل معلومات الضيف.أدخل التعليمات البرمجية
RSVPالتالية في الأسلوب للبحث في قائمة الضيوف:if (inviteOnly) { bool found = false; foreach (string guest in guestList) { if (guest.Equals(name)) { found = true; break; } } if (!found) { Console.WriteLine($"Sorry, {name} is not on the guest list"); return; } }في هذه التعليمة البرمجية، يمكنك التحقق لمعرفة ما إذا كان الاسم المحدد يساوي أي من الأسماء في قائمة الضيوف. إذا تم العثور على تطابق، يمكنك تعيين
foundإلى true والخروج من التكرارforeachالحلقي. إذا كانتfoundخاطئة، يمكنك عرض رسالة واستخدامreturnالكلمة الأساسية لإنهاء الأسلوب.استدعاء الأسلوب الخاص بك عن طريق إضافة التعليمات البرمجية
RSVPالتالية فوق توقيع الأسلوب:RSVP("Rebecca", 1, "none", true); RSVP("Nadia", 2, "Nuts", true); RSVP("Linh", 2, "none", false); RSVP("Tony", 1, "Jackfruit", true); RSVP("Noor", 4, "none", false); RSVP("Jonte", 2, "Stone fruit", false); ShowRSVPs();احفظ التعليمات البرمجية وشغلها لمراقبة الإخراج التالي:
Sorry, Tony is not on the guest list Total RSVPs: Name: Rebecca, Party Size: 1, Allergies: none Name: Nadia, Party Size: 2, Allergies: Nuts Name: Linh, Party Size: 2, Allergies: none Name: Noor, Party Size: 4, Allergies: none Name: Jonte, Party Size: 2, Allergies: Stone fruit
استخدام الوسيطات المسماة
عند استدعاء أسلوب يقبل العديد من المعلمات، قد يكون من الصعب فهم ما تمثله الوسيطات. يمكن أن يؤدي استخدام الوسيطات المسماة إلى تحسين إمكانية قراءة التعليمات البرمجية الخاصة بك. استخدم وسيطة مسماة عن طريق تحديد اسم المعلمة متبوعا بقيمة الوسيطة. في هذه المهمة، ستتدرب على استخدام الوسيطات المسماة.
حدد موقع السطر التالي من التعليمات البرمجية:
RSVP("Linh", 2, "none", false);تحديث استدعاء الأسلوب كما يلي:
RSVP(name: "Linh", partySize: 2, allergies: "none", inviteOnly: false);لاحظ أنك توفر اسم المعلمة متبوعا ب نقطتين والقيمة. يعرف بناء الجملة هذا وسيطة مسماة. ليس من الضروري تسمية جميع الوسيطات. على سبيل المثال، بناء الجملة التالي صالح أيضا:
RSVP("Linh", 2, allergies: "none", inviteOnly: false);RSVP("Linh", partySize: 2, "none", false);الوسيطات المسماة، عند استخدامها مع الوسيطات الموضعية، تكون صالحة إذا تم استخدامها في الموضع الصحيح. الوسيطات المسماة صالحة أيضا طالما أنها لا تتبعها أي وسيطات موضعية. على سبيل المثال، تضمين
"Linh"وفي2النهاية سيكون غير صالح:RSVP(allergies: "none", inviteOnly: false, "Linh", 2);إذا أدخلت هذه التعليمة البرمجية، فستحصل على الخطأ التالي:
Named argument 'allergies' is used out-of-position but is followed by an unnamed argumentحدد موقع السطر التالي من التعليمات البرمجية:
RSVP("Tony", 1, "Jackfruit", true);تحديث استدعاء الأسلوب كما يلي:
RSVP("Tony", inviteOnly: true, allergies: "Jackfruit", partySize: 1);لاحظ أنه لا يجب أن تظهر الوسيطات المسماة بالترتيب الأصلي. ومع ذلك، فإن الوسيطة
Tonyغير المسماة هي وسيطة موضعية، ويجب أن تظهر في الموضع المطابق.احفظ التعليمات البرمجية وشغلها لمراقبة الإخراج التالي:
Sorry, Tony is not on the guest list Total RSVPs: Name: Rebecca, Party Size: 1, Allergies: none Name: Nadia, Party Size: 2, Allergies: Nuts Name: Linh, Party Size: 2, Allergies: none Name: Noor, Party Size: 4, Allergies: none Name: Jonte, Party Size: 2, Allergies: Stone fruitلاحظ أن استخدام الوسيطات المسماة لا يغير الإخراج.
الإعلان عن المعلمات الاختيارية
تصبح المعلمة اختيارية عند تعيين قيمة افتراضية لها. إذا تم حذف معلمة اختيارية من الوسيطات، يتم استخدام القيمة الافتراضية عند تنفيذ الأسلوب. في هذه الخطوة، ستجعل المعلمات partySize، allergies واختيارية inviteOnly .
لتعريف المعلمات الاختيارية
RSVP، قم بتحديث توقيع الأسلوب كما يلي:void RSVP(string name, int partySize = 1, string allergies = "none", bool inviteOnly = true)خذ لحظة لمراقبة بناء الجملة. لا تزال المعلمات مفصولة بفواصل، ولكن يتم تعيين المعلمات
partySizeوallergiesوinviteOnlyإلى قيمة.بعد ذلك، ستقوم بتحديث المكالمات لتطبيق
RSVPالمعلمات الاختيارية.تحديث التعليمات البرمجية الخاصة بك إلى ما يلي:
RSVP("Rebecca"); RSVP("Nadia", 2, "Nuts"); RSVP(name: "Linh", partySize: 2, inviteOnly: false); RSVP("Tony", allergies: "Jackfruit", inviteOnly: true); RSVP("Noor", 4, inviteOnly: false); RSVP("Jonte", 2, "Stone fruit", false);في كل استدعاء أسلوب، لاحظ أن الاسم لا يتم حذفه أبدا. عند استدعاء أسلوب، يجب تضمين كافة الوسيطات المطلوبة دائما. ومع ذلك، يمكن حذف أي وسيطات اختيارية.
في هذه التعليمة البرمجية، قمت بإزالة الوسيطات
1, "none", trueمن (ريبيكا) وبما أن هذه الوسيطات تطابق القيمة الافتراضية، فإن نتيجة rsvp الخاصة ب ريبيكا هي نفسها.لقد أزلت الوسيطة
inviteOnlyمن صفحة ناديا نظرا لأن القيمة الافتراضيةinviteOnlyهيtrue، فإن نتيجة rsvp الخاصة بناديا هي نفسها.لقد أزلت الوسيطة
partySizeمن (طوني) إذا كان لدى توني دعوة، استخدام القيمة الافتراضيةpartySizeفي RSVP.لقد قمت بإزالة الوسيطة
allergiesمن كل من Linh وOr's rsvps. سيعرض rsvps القيمة الافتراضية لnoneل "الحساسية".احفظ التعليمات البرمجية وشغلها لمراقبة الإخراج التالي:
Sorry, Tony is not on the guest list Total RSVPs: Name: Rebecca, Party Size: 1, Allergies: none Name: Nadia, Party Size: 2, Allergies: Nuts Name: Linh, Party Size: 2, Allergies: none Name: Noor, Party Size: 4, Allergies: none Name: Jonte, Party Size: 2, Allergies: Stone fruitلاحظ أنه يتم استخدام القيم الافتراضية بدلا من الوسيطات المحذفة، مثل
partySizeوallergies.
خلاصة
إليك ما تعلمته عن الوسيطات الاختيارية والمسماة حتى الآن:
- يتم جعل المعلمات اختيارية عن طريق تعيين قيمة افتراضية في توقيع الأسلوب.
- يتم تحديد الوسيطات المسماة باسم المعلمة، متبوعة بنقطتين وقيمة الوسيطة.
- عند دمج الوسيطات المسماة والموضعية، يجب استخدام الترتيب الصحيح للمعلمات.