Esercizio - Metodi con parametri facoltativi

Completato

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.

  1. Nell'editor di Visual Studio Code eliminare qualsiasi codice esistente dagli esercizi precedenti.

  2. 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 RSVP metodo aggiunge informazioni sugli ospiti all'elenco e il ShowRSVPs metodo visualizza il totale degli RSVPs usando la sequenza di escape della scheda per separare le informazioni sugli ospiti.

  3. Immettere il codice seguente nel metodo RSVP per 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 found su true e interrompi il ciclo foreach. Se found è false, viene visualizzato un messaggio e viene usata la return parola chiave per terminare il metodo .

  4. Chiamare il metodo aggiungendo il codice seguente sopra la firma del RSVP metodo:

    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. 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.

  1. Individuare la riga di codice seguente: RSVP("Linh", 2, "none", false);

  2. 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" e 2 alla 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 argument

  3. Individuare la riga di codice seguente: RSVP("Tony", 1, "Jackfruit", true);

  4. 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 Tony posizionale e deve essere visualizzato nella posizione corrispondente.

  5. 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
    

    Si 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.

  1. Per definire parametri facoltativi, aggiornare la firma del RSVP metodo 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, allergiese inviteOnly vengono assegnati a un valore.

    Successivamente, aggiornerai le chiamate a RSVP per applicare i parametri facoltativi.

  2. 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", true dall'rsvp di Rebecca. Poiché questi argomenti corrispondono al valore predefinito, il risultato dell'rsvp di Rebecca è lo stesso.

    Hai rimosso l'argomento inviteOnly dall'RSVP di Nadia. Poiché il valore predefinito di inviteOnly è true, il risultato dell'rsvp di Nadia è lo stesso.

    Hai rimosso il parametro partySize dall'RSVP di Tony. Se Tony avesse un invito, il valore predefinito di partySize verrebbe usato nell'RSVP.

    L'argomento allergies è stato rimosso sia dagli rsvp di Linh che da quelli di Noor. I loro rsvp visualizzeranno il valore predefinito none per "Allergie".

  3. 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
    

    Si noti che i valori predefiniti vengono usati al posto di argomenti omessi, ad esempio partySize e allergies.

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.