Вправа – повернуті значення та параметри методів
- 18 хвилин
У попередньому блоці використано сценарій кодування "roll dice", щоб проілюструвати різницю між державними (екземплярами) і бездержавними (статичними) методами. Цей самий сценарій допоможе вам зрозуміти інші важливі поняття про методи викликів. Наприклад,
- обробка повернутого значення методу.
- параметри методу та передавання аргументів методу.
- вибір перевантаженої версії методу.
Повернуті значення
Деякі методи призначені, щоб завершити свою функцію і закінчити "тихо". Іншими словами, вони не повертають значення після завершення. Вони називаються недійсними методами.
Інші методи призначені для повернення значення після завершення. Повернуте значення зазвичай є результатом операції. Повернуте значення – це основний спосіб зворотного зв'язку з кодом, який викликає метод.
Ви побачили, що Random.Next() метод повертає int тип, який містить значення випадково згенерованого числа. Однак метод можна створити, щоб повернути будь-який тип даних навіть іншого класу. Наприклад, String у класі є кілька методів, які повертають рядок, деякі з яких повертають ціле число, а деякі – логічні.
Коли ви викликаєте метод, який повертає значення, ви часто призначаєте повернуте значення змінної. Таким чином, ви можете використовувати значення пізніше в коді. У сценарії кістки ви призначили повернуте значення змінної Random.Next()roll :
int roll = dice.Next(1, 7);
У деяких випадках ви можете використовувати повернуте значення безпосередньо, не призначаючи його змінній. Наприклад, можна надрукувати повернуте значення на консолі таким чином:
Console.WriteLine(dice.Next(1, 7));
Хоча метод повертає значення, можна викликати метод, не використовуючи повернуте значення. Наприклад, можна пропустити повернуте значення, викликавши метод таким чином:
dice.Next(1, 7);
Однак ігнорувати повернуте значення було б безглуздо. Причина виклику методу Next() полягає в тому, що ви можете отримати наступне випадкове значення.
Параметри методу та аргументи в операторі викликів
Коли ви викликаєте метод, ви можете передавати значення, які метод використовуватиме для виконання завдання. Ці значення називаються аргументами. Метод використовує аргументи, щоб призначати значення параметрам , визначеним у підписі методу. Для виконання завдання методу може знадобитися один або кілька параметрів, або взагалі немає.
Нотатка
Часто терміни "параметр" і "аргумент" використовуються взаємозамінно. Проте параметр посилається на змінну, яка використовується всередині методу. Аргумент – це значення, яке передається під час виклику методу.
Більшість методів призначено для прийняття одного або кількох параметрів. Параметри можна використовувати для настроювання способу виконання його роботи або безпосередньої роботи. Наприклад, метод Random.Next() використовує параметри для настроювання верхніх і нижніх меж повернутого значення. Однак параметр Console.WriteLine() використовується безпосередньо під час друку значення на консолі.
Методи використовують підпис методу , щоб визначити кількість параметрів, які прийматиме метод, а також тип даних кожного параметра. Інструкція з кодування, яка викликає метод, має відповідати вимогам, визначеним підписом методу. У деяких методах передбачено параметри для кількості та типу параметрів, які приймає метод.
Коли абонент викликає метод, він надає конкретні значення, які називаються аргументами, для кожного параметра. Аргументи мають бути сумісні з типом параметра. Однак ім'я аргументу, якщо його використано в коді виклику, не має збігатися з іменем параметра, визначеним у методі.
Розглянемо такий код:
Random dice = new Random();
int roll = dice.Next(1, 7);
Console.WriteLine(roll);
У першому коді створюється екземпляр класу з Random іменем dice. Другий рядок коду використовує dice.Next(1, 7) метод, щоб призначити випадкове значення цілому значенню з іменем roll. Зверніть увагу, що оператор виклику надає два аргументи, розділені символом , . Цей Next() метод містить підпис методу, який приймає два параметри типу int. Ці параметри використовуються для настроювання нижніх і верхніх меж для повернутого випадкового числа. Останній рядок коду використовує Console.WriteLine() метод для друку значення roll консолі.
Аргументи, передані до методу, мають збігатися з типом даних, що й відповідні параметри, визначені методом. Якщо ви спробуєте передати неправильно введений аргумент методу, компілятор C# зловить вашу помилку та змусить вас оновити оператор викликів, перш ніж код скомпілюється та запуститься. Перевірка типу – це один із способів, який використовують C# і .NET, щоб користувачі не відчували помилок під час виконання.
Нотатка
Хоча параметри часто використовуються, не всі методи потребують параметрів для виконання завдання. Наприклад, Console клас містить Console.Clear() метод, який не використовує параметри. Оскільки цей метод використовується для очищення будь-яких відомостей, що відображаються в консолі, він не потребує параметрів для виконання завдання.
Перевантажені методи
Багато методів у бібліотеці класів .NET перевантажили підписи методу. Крім того, це дає змогу викликати метод із аргументами, указаними в операторі викликів або без таких аргументів.
Перевантажений метод визначається підписами з кількома методами. Перевантажені методи дають змогу викликати метод або надати різні типи даних.
У деяких випадках перевантажені версії методу використовуються для визначення параметра з використанням різних типів даних. Наприклад, Console.WriteLine() метод містить 19 різних перевантажених версій. Більшість цих перевантажень дозволяють методу приймати різні типи, а потім записувати вказані відомості на консоль. Розглянемо такий код:
int number = 7;
string text = "seven";
Console.WriteLine(number);
Console.WriteLine();
Console.WriteLine(text);
У цьому прикладі ви викликаєте три окремі перевантажені версії методу WriteLine() .
- У першому
WriteLine()методі використовується підпис методуint, який визначає параметр. -
WriteLine()Другий метод використовує підпис методу, який визначає нульові параметри. - У третьому
WriteLine()методі використовується підпис методуstring, який визначає параметр.
В інших випадках перевантажені версії методу визначають різну кількість параметрів. Альтернативні параметри можна використовувати, щоб забезпечити більший контроль над бажаним результатом. Наприклад, Random.Next() метод має перевантажені версії, які дають змогу встановити різні рівні обмежень на випадково згенероване число.
Наведена нижче вправа викликає Random.Next() метод створення випадкових цілих значень із різними рівнями обмеження:
Переконайтеся, що в коді Visual Studio відкрито пустий файл Program.cs.
За потреби відкрийте Visual Studio Code і виконайте наведені нижче дії, щоб підготувати файл Program.cs в редакторі.
У меню Файл виберіть Відкрити папку.
Перейдіть до діалогового вікна Відкрити папку, а потім відкрийте папку CsharpProjects .
У поданні Visual Studio Code EXPLORER виберіть Program.cs.
У меню Вибір коду Visual Studio виберіть виділити все, а потім натисніть клавішу Delete.
Щоб перевірити перевантажені версії методу
Random.Next(), введіть такий код:Random dice = new Random(); int roll1 = dice.Next(); int roll2 = dice.Next(101); int roll3 = dice.Next(50, 101); Console.WriteLine($"First roll: {roll1}"); Console.WriteLine($"Second roll: {roll2}"); Console.WriteLine($"Third roll: {roll3}");У меню Файл коду Visual Studio натисніть кнопку Зберегти.
У поданні EXPLORER, щоб відкрити термінал у розташуванні папки TestProject, клацніть правою кнопкою миші елемент TestProject, а потім виберіть відкрити в інтегрованому терміналі.
Переконайтеся, що шлях до папки, що відображається в командному рядку, вказує на папку, яка містить файл Program.cs.
У командному рядку термінала, щоб запустити код, введіть dotnet виконати і натисніть клавішу Enter.
Зверніть увагу, що результат схожий на такий результат:
First roll: 342585470 Second roll: 43 Third roll: 89Створені числа випадкові, тому результати будуть різними. Однак у цьому прикладі показано діапазон результатів, які можуть відображатися.
Перевірте код за хвилину.
У першій версії методу
Next()не встановлено верхню та нижню межі, тому метод повертатиме значення від0до2,147,483,647, що є максимальним значеннямint, яке можна зберігати.Друга версія методу
Next()визначає максимальне значення як верхню межу, тому в цьому випадку можна очікувати випадкове значення між0і100.Третя версія методу
Next()визначає як мінімальні, так і максимальні значення, тому в цьому випадку можна очікувати випадкове значення між50і100.Закрийте панель терміналів.
Ви вже розглянули кілька тем у цій одиниці. Ось короткий список того, що ви розглянули:
- Ви розглянули, як використовувати повернуте значення методу (якщо метод надає повернуте значення).
- Ви розглянули, як метод може використовувати параметри, визначені як певні типи даних.
- Ви розглянули перевантажені версії деяких методів, які містять різні параметри або типи параметрів.
Використання функції IntelliSense
Код Visual Studio містить функції IntelliSense , які працюють на комп'ютері з мовною службою. Наприклад, мовна служба C# забезпечує інтелектуальне завершення коду на основі семантики мови та аналізу вихідного коду. У цьому розділі ви будете використовувати IntelliSense, щоб упровадити Random.Next() метод.
Оскільки IntelliSense відкритий у редакторі коду, ви можете дізнатися багато про метод, не виходячи з середовища кодування. IntelliSense надає підказки та довідкові відомості у спливаючому вікні під розташуванням курсору під час введення коду. Коли ви вводите код, спливаюче вікно IntelliSense змінюватиме його вміст залежно від контексту.
Наприклад, коли ви вводите слово dice повільно, IntelliSense відображатиме всі ключові слова, ідентифікатори C# (а точніше, імена змінних у коді) і класи в бібліотеці класу .NET, які відповідають введеним буквам. Функції автозаповнення редактора коду можна використовувати, щоб завершити введення слова, яке є верхнім збігом у спливаючому вікні IntelliSense. Спробуйте.
Переконайтеся, що файл Program.cs відкрито в коді Visual Studio.
Програма має містити такий код:
Random dice = new Random(); int roll1 = dice.Next(); int roll2 = dice.Next(101); int roll3 = dice.Next(50, 101); Console.WriteLine($"First roll: {roll1}"); Console.WriteLine($"Second roll: {roll2}"); Console.WriteLine($"Third roll: {roll3}");У нижній частині файлу коду, щоб поекспериментувати з IntelliSense, повільно введіть букви
d,iа потімc.Зверніть увагу на спливаюче вікно IntelliSense, яке з'являється, коли ви починаєте вводити текст.
Коли з'явиться вікно IntelliSense, має з'явитися список пропозицій. Під час введення
dicідентифікаторdiceмає бути у верхній частині списку.Натисніть клавішу Tab на клавіатурі.
Зверніть увагу, що все слово
diceзавершено в редакторі. Щоб змінити виділення, можна скористатися клавішами зі стрілками вгору та вниз, перш ніж натискати клавішу Tab.Нотатка
Якщо вікно IntelliSense зникне, його можна вибрати за допомогою
backspaceклавіші на клавіатурі, а потім знову ввести останній символ, щоб знову відкрити IntelliSense.Щоб указати оператора доступу учасника
., введіть символ.Зверніть увагу, що спливаюче вікно IntelliSense знову з'являється під час введення
.та відображає нефільтрований список усіх доступних методів (та інших членів класу).Введіть N
Список буде відфільтровано, а слово
Nextмає бути верхнім.Щоб виконати автозавершення всього слова, натисніть клавішу Tab.
Щоб указати оператор виклику методу, введіть (
Зверніть увагу, що закриваюча дужка додається автоматично.
Оператор виклику методу – це набір дужок, розташованих праворуч від імені методу. У цій частині оператора виклику вказано аргументи, які буде передано до методу. Під час виклику методу потрібен оператор виклику методу.
Зверніть увагу, що спливаюче вікно IntelliSense тепер відображає докладні відомості про
Random.Next()метод.Знайдіть хвилинку, щоб перевірити спливаюче вікно IntelliSense для методу
Random.Next().Нотатка
Якщо спливаюче вікно IntelliSense закрито, перш ніж ви мали змогу перевірити його, видаліть оператор
()виклику , а потім введіть ( щоб відобразити спливаюче вікно IntelliSense.Зверніть увагу, що спливаюче вікно містить три розділи, один ліворуч і два праворуч.
Праворуч ви побачите
int Random.Next()у верхній частині таReturns a non-negative random integer.в нижньому розділі. Визначаєintтип повернення для методу. Іншими словами, коли виконується ця версія методу, повертається значення типуint.У лівій частині спливаючого вікна IntelliSense відображається .
1/3Указує
1/3, що ви переглядаєте перший із трьох підписів методу для цього методуNext(). Зверніть увагу, що ця версія підпису методу дає змогу працювати без параметрів (аргументи не передаються до методу в операторі викликів).Зверніть увагу, що над і під
1/3.Щоб перевірити другу перевантажену версію методу, натисніть клавішу зі стрілкою вниз на клавіатурі.
Зверніть увагу, що за допомогою клавіш зі стрілками вгору та вниз можна переходити між різними перевантаженими версіями. Коли ви це зробите, ви побачите
1/32/3, і3/3з'явиться в лівій частині спливаючого вікна IntelliSense, а також корисні пояснення праворуч.Перевірте кожну перевантажену версію методу за хвилину
Random.Next().Друга перевантажена версія методу , інформує вас про те,
2/3щоNext()метод може прийняти параметрint maxValue. В описі зазначено, щоmaxValueце виключна верхня межа для числа, яке потрібноNext()створити методом. Монопольне значення вказує на те, що повернуте число буде менше максимального значення. Отже, якщо вказатиdice.Next(1,7);максимальну кількість кістки, буде 6. Зверніть увагу, що повідомлення в нижній частині розділу оновлено до:Returns a non-negative random integer that is less than the specified maximum.Третя версія методу інформує вас про те, що
3/3метод може приймати як параметри,Next()такint minValueіint maxValueяк параметри. Новий параметр – це нижня межа числа,minValueяке потрібноNext()створити методом. Оскільки нижня межа інклюзивна, а не виключна, повернуте значення може дорівнюватиminValue. Тепер у повідомленні внизу зазначено:Returns a random integer that is within a specified range.У цьому випадку IntelliSense надає всі відомості, які потрібно вибрати для відповідного перевантаження, включно з докладним поясненням
maxValueіminValue. Однак можуть виникати ситуації, коли потрібно звернутися до документації методу.
Використання learn.microsoft.com для отримання відомостей про перевантажені методи
Другий спосіб дізнатися про перевантажені версії методів – проконсультуватися в документації до методу. Документація також допоможе вам точно зрозуміти, для чого призначено кожен параметр.
Щоб почати, відкрийте основний браузер і засіб пошуку.
Виконайте пошук за запитом C# Random.Next()
Пошук має містити ім'я класу та ім'я методу. Крім того, можна додати термін
C#, щоб випадково не отримати результати для інших мов програмування.Виберіть верхній результат пошуку з URL-адресою, яка починається з
https://learn.microsoft.com.Один із найкращих результатів пошуку має призвести до URL-адреси, яка починається з
https://learn.microsoft.com. У такому разі заголовок посилання має відображатися якRandom.Next Method.Ось посилання на випадок, якщо вам не вдається знайти його за допомогою засобу пошуку:
Відкрийте посилання для C# Random.Next().
Швидко проскануйте документацію.
Прокрутіть вміст сторінки вниз, щоб переглянути різні зразки коду. Зверніть увагу, що зразки можна запустити у вікні браузера.
Документація learn.microsoft.com відповідає стандартному формату для кожного класу та методу в бібліотеці класу .NET.
У верхній частині веб-сторінки знайдіть розділ Із позначкою Перевантаження.
Зверніть увагу, що перелічено три перевантажені версії методу. Кожна перевантажена версія, яка міститься в списку, містить гіперпосилання на розташування далі на сторінці.
Щоб перейти "на сторінці" до опису другої перевантаженої версії, натисніть кнопку Далі(Int32).
Документація для кожної версії методу включає:
- Стислий опис функціональності методу
- Визначення методу
- Параметри, які приймає метод
- Повернуті значення
- Винятки, які можна підняти
- Приклади методу, який використовується
- Інші зауваження щодо методу
Перегляньте розділ Параметри за хвилину.
У розділі Параметри можна прочитати, що
maxValueпараметр – це "монопольна верхня межа випадкового числа, яке потрібно створити". Виключна верхня межа означає, що якщо потрібно, щоб числа не перевищувати10, потрібно передати значення11.Ви також можете прочитати в наступному рядку: "
maxValueмає бути більше або дорівнювати 0". Що станеться, якщо пропустити цю інструкцію? У розділі Винятки можна побачити, що метод повернеArgumentOutOfRangeExceptionmaxValueзначення менше 0.Нотатка
Вміст learn.microsoft.com є "джерелом істини" для бібліотеки класу .NET. Важливо прочитати документацію, щоб зрозуміти, як працюватиме певний метод.
Коротко
- Методи можуть не приймати параметри або кілька параметрів залежно від того, як вони були розроблені та реалізовані. Передаючи кілька параметрів, розділяйте їх символом
,. - Методи можуть повертати значення, коли завершують своє завдання, або вони не можуть повертати нічого (недійсне).
- Перевантажені методи підтримують кілька реалізацій методу, кожен з яких має унікальний підпис методу (кількість параметрів і тип даних кожного параметра).
- Функція IntelliSense може допомогти швидше писати код. Вона надає швидке посилання на методи, їх повернуті значення, перевантажені версії та типи їхніх параметрів.
- learn.microsoft.com – це "джерело істини", коли потрібно дізнатися, як працюють методи в бібліотеці класу .NET.
Перевірте свої знання
Зворотний зв’язок
Чи була ця сторінка корисна?
Ні
Потрібна допомога із цією темою?
Хочете скористатися Ask Learn, щоб отримати пояснення чи інструкції із цієї теми?