تمرين - أساليب ذات معلمات اختيارية

مكتمل

تسمح لغة C Sharp باستخدام المعلمات المسماة والاختيارية. تتيح لك هذه الأنواع من المعلمات تحديد الوسيطات التي تريد توفيرها للأسلوب، لذلك لا تقتصر على البنية المعرفة في توقيع الأسلوب.

تسمح لك الوسيطات المسماة بتحديد قيمة معلمة باستخدام اسمها بدلا من موضعها. تسمح لك المعلمات الاختيارية بحذف هذه الوسيطات عند استدعاء الأسلوب .

في هذا التمرين، ستتعلم كيفية استخدام كل من المعلمات المسماة والاختيارية.

إنشاء تطبيق RSVP

في هذه المهمة، ستقوم بإنشاء تطبيق مختصر للضيوف إلى RSVP إلى حدث. سيقوم الضيوف بتوفير حجم الحفلة وأي حساسية. ستضيف أيضا خيار تقييد RSVPs إلى قائمة ضيوف دعوة فقط.

  1. في محرر Visual Studio Code، احذف أي تعليمة برمجية موجودة من التدريبات السابقة.

  2. اكتب التعليمات البرمجية التالية في محرر 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 باستخدام تسلسل إلغاء علامة التبويب لفصل معلومات الضيف.

  3. أدخل التعليمات البرمجية 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 الكلمة الأساسية لإنهاء الأسلوب.

  4. استدعاء الأسلوب الخاص بك عن طريق إضافة التعليمات البرمجية 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();
    
  5. احفظ التعليمات البرمجية وشغلها لمراقبة الإخراج التالي:

    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
    

استخدام الوسيطات المسماة

عند استدعاء أسلوب يقبل العديد من المعلمات، قد يكون من الصعب فهم ما تمثله الوسيطات. يمكن أن يؤدي استخدام الوسيطات المسماة إلى تحسين إمكانية قراءة التعليمات البرمجية الخاصة بك. استخدم وسيطة مسماة عن طريق تحديد اسم المعلمة متبوعا بقيمة الوسيطة. في هذه المهمة، ستتدرب على استخدام الوسيطات المسماة.

  1. حدد موقع السطر التالي من التعليمات البرمجية: RSVP("Linh", 2, "none", false);

  2. تحديث استدعاء الأسلوب كما يلي:

    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

  3. حدد موقع السطر التالي من التعليمات البرمجية: RSVP("Tony", 1, "Jackfruit", true);

  4. تحديث استدعاء الأسلوب كما يلي:

    RSVP("Tony", inviteOnly: true, allergies: "Jackfruit",  partySize: 1);
    

    لاحظ أنه لا يجب أن تظهر الوسيطات المسماة بالترتيب الأصلي. ومع ذلك، فإن الوسيطة Tony غير المسماة هي وسيطة موضعية، ويجب أن تظهر في الموضع المطابق.

  5. احفظ التعليمات البرمجية وشغلها لمراقبة الإخراج التالي:

    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 .

  1. لتعريف المعلمات الاختيارية RSVP ، قم بتحديث توقيع الأسلوب كما يلي:

    void RSVP(string name, int partySize = 1, string allergies = "none", bool inviteOnly = true)
    

    خذ لحظة لمراقبة بناء الجملة. لا تزال المعلمات مفصولة بفواصل، ولكن يتم تعيين المعلمات partySizeو allergiesو inviteOnly إلى قيمة.

    بعد ذلك، ستقوم بتحديث المكالمات لتطبيق RSVP المعلمات الاختيارية.

  2. تحديث التعليمات البرمجية الخاصة بك إلى ما يلي:

    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 ل "الحساسية".

  3. احفظ التعليمات البرمجية وشغلها لمراقبة الإخراج التالي:

    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.

خلاصة

إليك ما تعلمته عن الوسيطات الاختيارية والمسماة حتى الآن:

  • يتم جعل المعلمات اختيارية عن طريق تعيين قيمة افتراضية في توقيع الأسلوب.
  • يتم تحديد الوسيطات المسماة باسم المعلمة، متبوعة بنقطتين وقيمة الوسيطة.
  • عند دمج الوسيطات المسماة والموضعية، يجب استخدام الترتيب الصحيح للمعلمات.