Esercizio - Metodi con parametri facoltativi
Il linguaggio C Sharp consente l'uso di parametri denominati e facoltativi. Questi tipi di parametri consentono di selezionare gli argomenti da fornire al metodo, quindi non si è limitati alla struttura definita nella firma del metodo.
Gli argomenti denominati consentono di specificare il valore di un parametro usando il nome anziché la posizione. I parametri facoltativi consentono di omettere tali argomenti quando si chiama il metodo .
In questo esercizio si apprenderà come usare parametri denominati e facoltativi.
Creare un'applicazione RSVP
In questa attività, creerai una breve applicazione per consentire agli ospiti di confermare la partecipazione a un evento. Gli ospiti forniranno il numero di partecipanti e eventuali allergie. Aggiungerai anche l'opzione per limitare gli RSVP a una lista di ospiti su invito.
Nell'editor di Visual Studio Code eliminare qualsiasi codice esistente dagli esercizi precedenti.
Digitare il codice seguente nell'editor di 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]); } }In questo codice si creano variabili per archiviare l'elenco guest e rsvps. Il
RSVPmetodo aggiunge informazioni sugli ospiti all'elenco e ilShowRSVPsmetodo visualizza il totale degli RSVPs usando la sequenza di escape della scheda per separare le informazioni sugli ospiti.Immettere il codice seguente nel metodo
RSVPper cercare nell'elenco degli ospiti.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; } }In questo codice si verifica se il nome specificato è uguale a uno qualsiasi dei nomi nell'elenco degli ospiti. Se viene trovata una corrispondenza, imposti
foundsu true e interrompi il cicloforeach. Sefoundè false, viene visualizzato un messaggio e viene usata lareturnparola chiave per terminare il metodo .Chiamare il metodo aggiungendo il codice seguente sopra la firma del
RSVPmetodo: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();Salvare ed eseguire il codice per osservare l'output seguente:
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
Usare argomenti denominati
Quando si chiama un metodo che accetta molti parametri, può essere difficile comprendere quali argomenti rappresentano. L'uso di argomenti denominati può migliorare la leggibilità del codice. Usare un argomento denominato specificando il nome del parametro seguito dal valore dell'argomento. In questa attività si proverà a usare argomenti nominati.
Individuare la riga di codice seguente:
RSVP("Linh", 2, "none", false);Aggiornare la chiamata al metodo come indicato di seguito:
RSVP(name: "Linh", partySize: 2, allergies: "none", inviteOnly: false);Si noti che si specifica il nome del parametro, seguito da due punti e dal valore. Questa sintassi definisce un argomento denominato. Non è necessario denominare tutti gli argomenti. Ad esempio, anche la sintassi seguente è valida:
RSVP("Linh", 2, allergies: "none", inviteOnly: false);RSVP("Linh", partySize: 2, "none", false);Gli argomenti denominati, se usati con argomenti posizionali, sono validi se vengono usati nella posizione corretta. Gli argomenti denominati sono validi anche se non sono seguiti da argomenti posizionali. Ad esempio, l'inclusione
"Linh"e2alla fine non è valida:RSVP(allergies: "none", inviteOnly: false, "Linh", 2);Se è stato immesso questo codice, viene visualizzato l'errore seguente:
Named argument 'allergies' is used out-of-position but is followed by an unnamed argumentIndividuare la riga di codice seguente:
RSVP("Tony", 1, "Jackfruit", true);Aggiornare la chiamata al metodo come indicato di seguito:
RSVP("Tony", inviteOnly: true, allergies: "Jackfruit", partySize: 1);Si noti che gli argomenti denominati non devono essere visualizzati nell'ordine originale. Tuttavia, l'argomento senza nome è un argomento
Tonyposizionale e deve essere visualizzato nella posizione corrispondente.Salvare ed eseguire il codice per osservare l'output seguente:
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 fruitSi noti che l'uso di argomenti denominati non modifica l'output.
Dichiarare parametri facoltativi
Un parametro diventa facoltativo quando viene assegnato un valore predefinito. Se un parametro facoltativo viene omesso dagli argomenti, il valore predefinito viene utilizzato quando il metodo viene eseguito. In questo passaggio si renderanno i parametri partySizeallergies e inviteOnly facoltativi.
Per definire parametri facoltativi, aggiornare la firma del
RSVPmetodo nel modo seguente:void RSVP(string name, int partySize = 1, string allergies = "none", bool inviteOnly = true)Prenditi un momento per osservare la sintassi. I parametri sono ancora separati da virgole, ma i parametri
partySize,allergieseinviteOnlyvengono assegnati a un valore.Successivamente, aggiornerai le chiamate a
RSVPper applicare i parametri facoltativi.Aggiornare il codice come segue:
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);In ogni chiamata al metodo si noti che il nome non viene mai omesso. Quando viene chiamato un metodo, tutti gli argomenti obbligatori devono essere sempre inclusi. È tuttavia possibile omettere qualsiasi argomento facoltativo.
In questo codice sono stati rimossi gli argomenti
1, "none", truedall'rsvp di Rebecca. Poiché questi argomenti corrispondono al valore predefinito, il risultato dell'rsvp di Rebecca è lo stesso.Hai rimosso l'argomento
inviteOnlydall'RSVP di Nadia. Poiché il valore predefinito diinviteOnlyètrue, il risultato dell'rsvp di Nadia è lo stesso.Hai rimosso il parametro
partySizedall'RSVP di Tony. Se Tony avesse un invito, il valore predefinito dipartySizeverrebbe usato nell'RSVP.L'argomento
allergiesè stato rimosso sia dagli rsvp di Linh che da quelli di Noor. I loro rsvp visualizzeranno il valore predefinitononeper "Allergie".Salvare ed eseguire il codice per osservare l'output seguente:
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 fruitSi noti che i valori predefiniti vengono usati al posto di argomenti omessi, ad esempio
partySizeeallergies.
Riepilogo
Ecco cosa si è appreso finora sugli argomenti opzionali e denominati:
- I parametri vengono resi facoltativi impostando un valore predefinito nella firma del metodo.
- Gli argomenti denominati vengono specificati con il nome del parametro, seguiti da due punti e dal valore dell'argomento.
- Quando si combinano argomenti denominati e posizionali, è necessario usare l'ordine corretto dei parametri.