Exercício - Métodos com parâmetros opcionais
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.
No Editor de Códigos do Visual Studio, exclua qualquer código existente dos exercícios anteriores.
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
RSVPacrescenta informações do convidado à lista, e o métodoShowRSVPsexibe o total de RSVPs usando a sequência de escape de tabulação para separar as informações do convidado.Insira o seguinte código no
RSVPmé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
foundcomo true e sai doforeachloop. Sefoundfor false, você exibe uma mensagem e usa areturnpalavra-chave para encerrar o método.Chame seu método adicionando o seguinte código acima da assinatura do
RSVPmé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();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.
Localize a seguinte linha de código:
RSVP("Linh", 2, "none", false);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"e2no 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 argumentLocalize a seguinte linha de código:
RSVP("Tony", 1, "Jackfruit", true);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
Tonysem nome é um argumento posicional e deve aparecer na posição correspondente.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 fruitObserve 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.
Para definir parâmetros opcionais, atualize a assinatura do
RSVPmé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,allergieseinviteOnlycada um é atribuído a um valor.Em seguida, irá atualizar as chamadas para
RSVPpara aplicar os parâmetros opcionais.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", truedo rsvp de Rebecca. Como esses argumentos correspondem ao valor padrão, o resultado do rsvp de Rebecca é o mesmo.Você removeu o argumento
inviteOnlyda confirmação de presença da Nadia. Como o valor padrão deinviteOnlyétrue, o resultado do rsvp de Nadia é o mesmo.Você removeu o
partySizeargumento do rsvp de Tony. Se Tony tivesse um convite, o valor padrão departySizeseria usado no RSVP.Você removeu o
allergiesargumento das confirmações de presença de Linh e Noor. Seus rsvps exibirão o valor padrão denone"Alergias".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 fruitObserve que os valores padrão são usados no lugar de argumentos omitidos, como
partySizeeallergies.
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.