Ejercicio: Métodos con parámetros opcionales

Completado

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.

  1. En el editor de Visual Studio Code, elimine cualquier código que haya de los ejercicios anteriores.

  2. 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 RSVP anexa información de los invitados a la lista y el método ShowRSVPs muestra el número total de confirmaciones de asistencia mediante la secuencia de escape de tabulación para separar la información de los invitados.

  3. Escriba el código siguiente en el RSVP mé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 found en true y se interrumpe el foreach bucle. Si found es false, se muestra un mensaje y se usa la return palabra clave para finalizar el método.

  4. 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();
    
  5. 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.

  1. Busque la siguiente línea de código: RSVP("Linh", 2, "none", false);

  2. 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" y 2 al 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 argument

  3. Busque la siguiente línea de código: RSVP("Tony", 1, "Jackfruit", true);

  4. 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 Tony sin nombre es un argumento posicional y debe aparecer en la posición coincidente.

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

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

  1. 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, allergiesy inviteOnly se asignan a un valor.

    A continuación, actualizará las llamadas a RSVP para aplicar los parámetros opcionales.

  2. 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", true del 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 inviteOnly de la confirmación de asistencia de Nadia. Dado que el valor predeterminado de inviteOnly es true, el resultado del rsvp de Nadia es el mismo.

    Ha quitado el argumento partySize de la confirmación de asistencia de Tony. Si Tony tuviera una invitación, el valor predeterminado de partySize se usaría en el RSVP.

    Ha quitado el argumento allergies de las confirmaciones de asistencia de Linh y Noor. Sus rsvps mostrarán el valor predeterminado de none para "Alergias".

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

    Observe que los valores predeterminados se usan en lugar de argumentos omitidos, como partySize y allergies.

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.