Cvičení – metody s volitelnými parametry
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í.
V editoru Visual Studio Code odstraňte veškerý existující kód z předchozích cvičení.
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
RSVPpřipojí informace o hostech do seznamu, a metodaShowRSVPszobrazí celkový počet RSVPs pomocí sekvence tabulátoru k oddělení informací o hostech.Do metody zadejte následující kód
RSVPpro 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
foundhodnotu true a přerušíte smyčkuforeach. Pokudfoundje false, zobrazíte zprávu a pomocí klíčovéhoreturnslova ukončete metodu.Zavolejte svou metodu přidáním následujícího kódu nad
RSVPsignaturu 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();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ů.
Vyhledejte následující řádek kódu:
RSVP("Linh", 2, "none", false);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"a2na 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 argumentVyhledejte následující řádek kódu:
RSVP("Tony", 1, "Jackfruit", true);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
Tonyje však pozičním argumentem a musí se objevit v odpovídající pozici.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 fruitVš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é.
Pokud chcete definovat volitelné parametry, aktualizujte
RSVPpodpis 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,allergiesainviteOnlyjsou přiřazeny k hodnotě.Dále aktualizujete volání tak, aby
RSVPpoužila volitelné parametry.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", truez rebecca rsvp. Vzhledem k tomu, že tyto argumenty odpovídají výchozí hodnotě, výsledek rsvp Rebecca je stejný.Odebrali jste
inviteOnlyargument z Nadiina RSVP. Vzhledem k tomu, že výchozí hodnotainviteOnlyjetrue, výsledek rsvp Nadia je stejný.Odebrali
partySizejste argument z Tonyho rsvp. Pokud má Tony pozvánku, použije se výchozí hodnotapartySizev RSVP.Odebrali
allergiesjste argument z linhových i noorových rsvp. Jejich rsvps zobrazí výchozí hodnotunone"Alergie".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 fruitVšimněte si, že výchozí hodnoty se používají místo vynechaných argumentů, například
partySizeaallergies.
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ů.