Упражнение. Методы с необязательными параметрами

Завершено

Язык C Sharp позволяет использовать именованные и необязательные параметры. Эти типы параметров позволяют выбрать аргументы, которые нужно предоставить методу, поэтому не ограничивается структурой, определенной в сигнатуре метода.

Именованные аргументы позволяют указать значение параметра, используя его имя, а не позицию. Необязательные параметры позволяют опустить эти аргументы при вызове метода.

В этом упражнении вы узнаете, как использовать как именованные, так и необязательные параметры.

Создание приложения RSVP

В этой задаче вы создадите простое приложение, чтобы гости могли подтвердить свое участие в мероприятии. Гости укажут количество участников и любые аллергии. Вы также добавите параметр ограничения RSVP в список гостей, доступный только для приглашения.

  1. В редакторе Visual Studio Code удалите существующий код из предыдущих упражнений.

  2. Введите следующий код в редактор 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]);
        }
    }
    

    В этом коде создаются переменные для хранения гостевого списка и rsvps. Метод RSVP добавляет информацию о гостях в список, а метод ShowRSVPs отображает общее количество приглашенных, используя символ табуляции для разделения информации о гостях.

  3. Введите следующий код в методе RSVP для поиска гостевого списка:

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

    В этом коде проверяется, равно ли заданное имя любому из имен в гостевом списке. Если совпадение найдено, установите found в значение true и выйдите из foreach цикла. Если found значение равно false, отображается сообщение и используется return ключевое слово для завершения метода.

  4. Вызовите метод, добавив следующий код над сигнатурой 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. Сохраните и запустите код, чтобы просмотреть следующие выходные данные:

    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
    

Использование именованных аргументов

При вызове метода, принимающего множество параметров, может быть сложно понять, что представляют собой аргументы. Использование именованных аргументов может улучшить удобочитаемость кода. Используйте именованный аргумент, указав имя параметра, за которым следует значение аргумента. В этой задаче вы будете использовать именованные аргументы.

  1. Найдите следующую строку кода: RSVP("Linh", 2, "none", false);

  2. Обновите вызов метода следующим образом:

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

    Обратите внимание, что вы указываете имя параметра, за которым следует двоеточие и значение. Этот синтаксис определяет именованный аргумент. Не обязательно называть все аргументы. Например, следующий синтаксис также является допустимым:

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

    Именованные аргументы, используемые с позициальными аргументами, допустимы, если они используются в правильной позиции. Именованные аргументы также допустимы, если за ними не следует никаких позиционных аргументов. Например, использование "Linh" и 2 в конце было бы недопустимо:

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

    Если вы ввели этот код, вы получите следующую ошибку: Named argument 'allergies' is used out-of-position but is followed by an unnamed argument

  3. Найдите следующую строку кода: RSVP("Tony", 1, "Jackfruit", true);

  4. Обновите вызов метода следующим образом:

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

    Обратите внимание, что именованные аргументы не должны отображаться в исходном порядке. Однако неименованный аргумент является позициальным аргументом Tony и должен отображаться в соответствующей позиции.

  5. Сохраните и запустите код, чтобы просмотреть следующие выходные данные:

    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
    

    Обратите внимание, что использование именованных аргументов не изменяет выходные данные.

Объявление необязательных параметров

Параметр становится необязательным при назначении значения по умолчанию. Если необязательный параметр опущен из аргументов, значение по умолчанию используется при выполнении метода. На этом шаге вы создадите параметры partySizeallergies и inviteOnly необязательные.

  1. Чтобы определить необязательные параметры, обновите сигнатуру RSVP метода следующим образом:

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

    Обратите внимание на синтаксис. Параметры по-прежнему разделены запятыми, но параметры partySizeallergies, и inviteOnly каждый присваивается значению.

    Далее, вы обновите вызовы функции RSVP, чтобы применить необязательные параметры.

  2. Обновите код следующим образом:

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

    В каждом вызове метода обратите внимание, что имя никогда не опускается. При вызове метода все обязательные аргументы всегда должны быть включены. Однако любые необязательные аргументы могут быть опущены.

    В этом коде вы удалили аргументы 1, "none", true из rsvp Ребекки. Так как эти аргументы соответствуют значению по умолчанию, результат rsvp Ребекки совпадает.

    Вы удалили inviteOnly аргумент из rsvp Нади. Так как значение inviteOnly по умолчанию равно true, результат rsvp Nadia совпадает.

    Вы удалили partySize аргумент из rsvp Тони. Если у Тони было приглашение, значение partySize по умолчанию будет использоваться в RSVP.

    Вы удалили allergies аргумент из rsvps Linh и Noor. Их rsvps будет отображать значение none по умолчанию для "Аллергия".

  3. Сохраните и запустите код, чтобы просмотреть следующие выходные данные:

    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
    

    Обратите внимание, что значения по умолчанию используются вместо опущенных аргументов, таких как partySize и allergies.

Обзор

Вот что вы узнали о необязательных и именованных аргументах до сих пор:

  • Параметры делаются необязательными, задав значение по умолчанию в сигнатуре метода.
  • Именованные аргументы указываются с именем параметра, а затем двоеточием и значением аргумента.
  • При объединении именованных и позиционных аргументов необходимо использовать правильный порядок параметров.