Cvičení – metody s volitelnými parametry

Dokončeno

Jazyk C Sharp umožňuje použití pojmenovaných a volitelných parametrů. Tyto typy parametrů umožňují vybrat, které argumenty chcete metodě zadat, takže nejste omezeni na strukturu definovanou v podpisu metody.

Pojmenované argumenty umožňují zadat hodnotu parametru pomocí jejího názvu, nikoli pozice. Volitelné parametry umožňují vynechat tyto argumenty při volání metody.

V tomto cvičení se dozvíte, jak používat pojmenované i volitelné parametry.

Vytvoření aplikace RSVP

V této úloze vytvoříte stručnou aplikaci pro hosty, kteří se připojí k události. Hosté budou mít k dispozici svou velikost party a všechny alergie. Přidáte také možnost omezit rsVPs na seznam hostů jen pro pozvání.

  1. V editoru Visual Studio Code odstraňte veškerý existující kód z předchozích cvičení.

  2. Do editoru visual studio Code zadejte následující kód:

    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]);
        }
    }
    

    V tomto kódu vytvoříte proměnné pro uložení seznamu hostů a rsvps. Metoda RSVP připojí informace o hostech do seznamu, a metoda ShowRSVPs zobrazí celkový počet RSVPs pomocí sekvence tabulátoru k oddělení informací o hostech.

  3. Do metody zadejte následující kód RSVP pro vyhledávání v seznamu hostů:

    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;
        }
    }
    

    V tomto kódu zkontrolujete, jestli se daný název rovná libovolnému jménu v seznamu hostů. Pokud se najde shoda, nastavíte found hodnotu true a přerušíte smyčku foreach . Pokud found je false, zobrazíte zprávu a pomocí klíčového return slova ukončete metodu.

  4. Zavolejte svou metodu přidáním následujícího kódu nad RSVP signaturu metody:

    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. Uložte a spusťte kód, abyste mohli sledovat následující výstup:

    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
    

Použití pojmenovaných argumentů

Při volání metody, která přijímá mnoho parametrů, může být obtížné pochopit, co argumenty představují. Použití pojmenovaných argumentů může zlepšit čitelnost kódu. Pojmenovaný argument použijte zadáním názvu parametru následovaného hodnotou argumentu. V tomto úkolu si procvičíte používání pojmenovaných argumentů.

  1. Vyhledejte následující řádek kódu: RSVP("Linh", 2, "none", false);

  2. Následujícím způsobem aktualizujte volání metody:

    RSVP(name: "Linh", partySize: 2, allergies: "none", inviteOnly: false);
    

    Všimněte si, že zadáte název parametru a za ním dvojtečku a hodnotu. Tato syntaxe definuje pojmenovaný argument. Není nutné pojmenovat všechny argumenty. Například platí následující syntaxe:

    RSVP("Linh", 2, allergies: "none", inviteOnly: false); RSVP("Linh", partySize: 2, "none", false);

    Pojmenované argumenty, pokud se používají s pozičními argumenty, jsou platné, pokud jsou použity ve správné pozici. Pojmenované argumenty jsou také platné, pokud nejsou následované žádnými pozičními argumenty. Například zahrnutí "Linh" a 2 na konci by bylo neplatné:

    RSVP(allergies: "none", inviteOnly: false, "Linh", 2);

    Pokud jste zadali tento kód, zobrazí se následující chyba: Named argument 'allergies' is used out-of-position but is followed by an unnamed argument

  3. Vyhledejte následující řádek kódu: RSVP("Tony", 1, "Jackfruit", true);

  4. Následujícím způsobem aktualizujte volání metody:

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

    Všimněte si, že pojmenované argumenty se nemusí zobrazovat v původním pořadí. Nepojmenovaný argument Tony je však pozičním argumentem a musí se objevit v odpovídající pozici.

  5. Uložte a spusťte kód, abyste mohli sledovat následující výstup:

    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
    

    Všimněte si, že použití pojmenovaných argumentů nezmění výstup.

Deklarace volitelných parametrů

Parametr se stane volitelným, když je přiřazena výchozí hodnota. Pokud je z argumentů vynechán volitelný parametr, použije se při spuštění metody výchozí hodnota. V tomto kroku nastavíte parametry partySizeallergies a inviteOnly volitelné.

  1. Pokud chcete definovat volitelné parametry, aktualizujte RSVP podpis metody následujícím způsobem:

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

    Chvíli se podívejte na syntaxi. Parametry jsou stále odděleny čárkami, ale parametry partySize, allergiesa inviteOnly jsou přiřazeny k hodnotě.

    Dále aktualizujete volání tak, aby RSVP použila volitelné parametry.

  2. Aktualizujte kód následujícím kódem:

    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);
    

    V každém volání metody si všimněte, že název není nikdy vynechán. Při zavolání metody musí být vždy zahrnuty všechny požadované argumenty. Některé volitelné argumenty však můžou být vynechány.

    V tomto kódu jste odebrali argumenty 1, "none", true z rebecca rsvp. Vzhledem k tomu, že tyto argumenty odpovídají výchozí hodnotě, výsledek rsvp Rebecca je stejný.

    Odebrali jste inviteOnly argument z Nadiina RSVP. Vzhledem k tomu, že výchozí hodnota inviteOnly je true, výsledek rsvp Nadia je stejný.

    Odebrali partySize jste argument z Tonyho rsvp. Pokud má Tony pozvánku, použije se výchozí hodnota partySize v RSVP.

    Odebrali allergies jste argument z linhových i noorových rsvp. Jejich rsvps zobrazí výchozí hodnotu none "Alergie".

  3. Uložte a spusťte kód, abyste mohli sledovat následující výstup:

    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
    

    Všimněte si, že výchozí hodnoty se používají místo vynechaných argumentů, například partySize a allergies.

Rekapitulace

Tohle jste se dosud naučili o nepovinných a pojmenovaných argumentech:

  • Parametry jsou volitelné nastavením výchozí hodnoty v podpisu metody.
  • Pojmenované argumenty se zadají s názvem parametru, za kterým následuje dvojtečka a hodnota argumentu.
  • Při kombinování pojmenovaných a pozičních argumentů je nutné použít správné pořadí parametrů.