Ejercicio: Métodos con parámetros opcionales
El lenguaje C Sharp permite el uso de parámetros con nombre y opcionales. Estos tipos de parámetros permiten seleccionar qué argumentos desea proporcionar al método, por lo que no está restringido a la estructura definida en la firma del método.
Los argumentos con nombre permiten especificar el valor de un parámetro mediante su nombre en lugar de la posición. Los parámetros opcionales permiten omitir esos argumentos al llamar al método .
En este ejercicio, aprenderás a usar parámetros con nombre y opcionales.
Creación de una aplicación RSVP
En esta tarea, crearás una breve aplicación para que los invitados confirmen su asistencia a un evento. Los huéspedes proporcionarán su número de asistentes e indicarán cualquier alergia. También puede agregar la opción de restringir las confirmaciones de asistencia a una lista exclusiva para invitados.
En el editor de Visual Studio Code, elimine cualquier código que haya de los ejercicios anteriores.
En el Editor de Visual Studio Code, escriba el código siguiente:
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]); } }En este código, creará variables para almacenar la lista de invitados y rsvps. El método
RSVPanexa información de los invitados a la lista y el métodoShowRSVPsmuestra el número total de confirmaciones de asistencia mediante la secuencia de escape de tabulación para separar la información de los invitados.Escriba el código siguiente en el
RSVPmétodo para buscar en la lista de invitados: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; } }En este código, comprobará si el nombre especificado es igual a cualquiera de los nombres de la lista de invitados. Si se encuentra una coincidencia, se establece
founden true y se interrumpe elforeachbucle. Sifoundes false, se muestra un mensaje y se usa lareturnpalabra clave para finalizar el método.Llame al método agregando el código siguiente encima de la firma del método
RSVP: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();Guarde y ejecute el código para observar la salida siguiente:
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
Uso de argumentos con nombre
Al llamar a un método que acepta muchos parámetros, puede resultar complicado comprender lo que representan los argumentos. El uso de argumentos con nombre puede mejorar la legibilidad del código. Use un argumento con nombre especificando el nombre del parámetro seguido del valor del argumento. En esta tarea, practicará el uso de argumentos con nombre.
Busque la siguiente línea de código:
RSVP("Linh", 2, "none", false);Actualice la llamada de método de la siguiente manera:
RSVP(name: "Linh", partySize: 2, allergies: "none", inviteOnly: false);Observe que se proporciona el nombre del parámetro, seguido de dos puntos y el valor. Esta sintaxis define un argumento con nombre. No es necesario asignar un nombre a todos los argumentos. Por ejemplo, la sintaxis siguiente también es válida:
RSVP("Linh", 2, allergies: "none", inviteOnly: false);RSVP("Linh", partySize: 2, "none", false);Los argumentos con nombre, cuando se usan con argumentos posicionales, son válidos si se usan en la posición correcta. Los argumentos con nombre también son válidos siempre que no sigan ningún argumento posicional. Por ejemplo, incluir
"Linh"y2al final no sería válido:RSVP(allergies: "none", inviteOnly: false, "Linh", 2);Si escribió este código, obtendrá el siguiente error:
Named argument 'allergies' is used out-of-position but is followed by an unnamed argumentBusque la siguiente línea de código:
RSVP("Tony", 1, "Jackfruit", true);Actualice la llamada de método de la siguiente manera:
RSVP("Tony", inviteOnly: true, allergies: "Jackfruit", partySize: 1);Observe que los argumentos con nombre no tienen que aparecer en el orden original. Sin embargo, el argumento
Tonysin nombre es un argumento posicional y debe aparecer en la posición coincidente.Guarde y ejecute el código para observar la salida siguiente:
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 el uso de argumentos con nombre no cambia la salida.
Declarar parámetros opcionales
Un parámetro se convierte en opcional cuando se le asigna un valor predeterminado. Si se omite un parámetro opcional de los argumentos, se usa el valor predeterminado cuando se ejecuta el método. En este paso, harás los parámetros partySize, allergies y inviteOnly opcionales.
Para definir parámetros opcionales, actualice la firma del método de la forma siguiente:
void RSVP(string name, int partySize = 1, string allergies = "none", bool inviteOnly = true)Dedique un momento a observar la sintaxis. Los parámetros siguen separados por comas, pero los parámetros
partySize,allergiesyinviteOnlyse asignan a un valor.A continuación, actualizará las llamadas a
RSVPpara aplicar los parámetros opcionales.Actualice el código a lo siguiente:
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);En cada llamada al método, observe que el nombre nunca se omite. Cuando se llama a un método, siempre se deben incluir todos los argumentos necesarios. Sin embargo, se pueden omitir los argumentos opcionales.
En este código, ha quitado los argumentos
1, "none", truedel rsvp de Rebecca. Dado que estos argumentos coinciden con el valor predeterminado, el resultado del rsvp de Rebecca es el mismo.Ha quitado el argumento
inviteOnlyde la confirmación de asistencia de Nadia. Dado que el valor predeterminado deinviteOnlyestrue, el resultado del rsvp de Nadia es el mismo.Ha quitado el argumento
partySizede la confirmación de asistencia de Tony. Si Tony tuviera una invitación, el valor predeterminado departySizese usaría en el RSVP.Ha quitado el argumento
allergiesde las confirmaciones de asistencia de Linh y Noor. Sus rsvps mostrarán el valor predeterminado denonepara "Alergias".Guarde y ejecute el código para observar la salida siguiente:
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 los valores predeterminados se usan en lugar de argumentos omitidos, como
partySizeyallergies.
Resumen
Esto es lo que has aprendido sobre los argumentos opcionales y con nombre hasta ahora:
- Los parámetros se convierten en opcionales estableciendo un valor predeterminado en la firma del método.
- Los argumentos con nombre se especifican con el nombre del parámetro, seguido de dos puntos y el valor del argumento.
- Al combinar argumentos denominados y posicionales, es necesario utilizar el orden correcto de los parámetros.