Exercício - Métodos com parâmetros opcionais

Concluído

A linguagem C Sharp permite o uso de parâmetros nomeados e opcionais. Esses tipos de parâmetros permitem que você selecione quais argumentos deseja fornecer ao método, para que você não fique restrito à estrutura definida na assinatura do método.

Os argumentos nomeados permitem especificar o valor de um parâmetro usando seu nome em vez de posição. Os parâmetros opcionais permitem que você omita esses argumentos ao chamar o método.

Neste exercício, você aprenderá a usar parâmetros nomeados e opcionais.

Criar um aplicativo RSVP

Nesta tarefa, você criará um breve aplicativo para que os convidados confirmem presença em um evento. Os convidados fornecerão o tamanho da festa e eventuais alergias. Você também adicionará a opção de restringir RSVPs a uma lista exclusiva de convidados.

  1. No Editor de Códigos do Visual Studio, exclua qualquer código existente dos exercícios anteriores.

  2. Digite o seguinte código no Editor de Códigos do Visual Studio:

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

    Neste código, você cria variáveis para armazenar a lista de convidados e rsvps. O método RSVP acrescenta informações do convidado à lista, e o método ShowRSVPs exibe o total de RSVPs usando a sequência de escape de tabulação para separar as informações do convidado.

  3. Insira o seguinte código no RSVP método para pesquisar a lista de convidados:

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

    Neste código, tu verificas se o nome é igual a algum dos nomes na lista de convidados. Se uma correspondência for encontrada, você define found como true e sai do foreach loop. Se found for false, você exibe uma mensagem e usa a return palavra-chave para encerrar o método.

  4. Chame seu método adicionando o seguinte código acima da assinatura do RSVP método:

    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. Salve e execute o código para observar a seguinte saída:

    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
    

Usar argumentos nomeados

Ao chamar um método que aceita muitos parâmetros, pode ser complicado entender o que os argumentos representam. O uso de argumentos nomeados pode melhorar a legibilidade do seu código. Use um argumento nomeado especificando o nome do parâmetro seguido do valor do argumento. Nesta tarefa, você praticará o uso de argumentos nomeados.

  1. Localize a seguinte linha de código: RSVP("Linh", 2, "none", false);

  2. Atualize a chamada de método da seguinte maneira:

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

    Observe que você fornece o nome do parâmetro, seguido por dois pontos e o valor. Esta sintaxe define um argumento nomeado. Não é necessário nomear todos os argumentos. Por exemplo, a sintaxe a seguir também é válida:

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

    Os argumentos nomeados, quando usados com argumentos posicionais, são válidos se forem usados na posição correta. Os argumentos nomeados também são válidos, desde que não sejam seguidos por argumentos posicionais. Por exemplo, incluir "Linh" e 2 no final seria inválido:

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

    Se você inseriu esse código, você receberá o seguinte erro: Named argument 'allergies' is used out-of-position but is followed by an unnamed argument

  3. Localize a seguinte linha de código: RSVP("Tony", 1, "Jackfruit", true);

  4. Atualize a chamada de método da seguinte maneira:

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

    Observe que os argumentos nomeados não precisam aparecer na ordem original. No entanto, o argumento Tony sem nome é um argumento posicional e deve aparecer na posição correspondente.

  5. Salve e execute o código para observar a seguinte saída:

    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
    

    Observe que o uso de argumentos nomeados não altera a saída.

Declarar parâmetros opcionais

Um parâmetro torna-se opcional quando lhe é atribuído um valor predefinido. Se um parâmetro opcional for omitido dos argumentos, o valor padrão será usado quando o método for executado. Nesta etapa, você tornará os parâmetros partySizee allergiesinviteOnly opcionais.

  1. Para definir parâmetros opcionais, atualize a assinatura do RSVP método da seguinte maneira:

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

    Reserve um momento para observar a sintaxe. Os parâmetros ainda são separados por vírgulas, mas os parâmetros partySize, allergiese inviteOnly cada um é atribuído a um valor.

    Em seguida, irá atualizar as chamadas para RSVP para aplicar os parâmetros opcionais.

  2. Atualize seu código para o seguinte:

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

    Em cada chamada de método, observe que o nome nunca é omitido. Quando um método é chamado, todos os argumentos necessários devem sempre ser incluídos. No entanto, quaisquer argumentos opcionais podem ser omitidos.

    Neste código, você removeu os argumentos 1, "none", true do rsvp de Rebecca. Como esses argumentos correspondem ao valor padrão, o resultado do rsvp de Rebecca é o mesmo.

    Você removeu o argumento inviteOnly da confirmação de presença da Nadia. Como o valor padrão de inviteOnly é true, o resultado do rsvp de Nadia é o mesmo.

    Você removeu o partySize argumento do rsvp de Tony. Se Tony tivesse um convite, o valor padrão de partySize seria usado no RSVP.

    Você removeu o allergies argumento das confirmações de presença de Linh e Noor. Seus rsvps exibirão o valor padrão de none "Alergias".

  3. Salve e execute o código para observar a seguinte saída:

    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
    

    Observe que os valores padrão são usados no lugar de argumentos omitidos, como partySize e allergies.

Recapitulação

Aqui está o que você aprendeu sobre argumentos opcionais e nomeados até agora:

  • Os parâmetros são tornados opcionais definindo um valor padrão na assinatura do método.
  • Os argumentos nomeados são especificados com o nome do parâmetro, seguido por dois pontos e o valor do argumento.
  • Ao combinar argumentos nomeados e posicionais, você deve usar a ordem correta dos parâmetros.