OOP Course
Сьогодні

Підрозділ 2.17

Параметри методів

Розглядає параметри методів, необов'язкові та іменовані параметри, порядок передачі аргументів і приклади викликів.

2.17. Параметри методів

Метод без параметрів завжди виконує одне й те саме: виводить один і той самий рядок або виконує фіксовану дію. Щоб метод міг працювати з різними даними, йому передають параметри — вхідні значення, що надходять ззовні під час виклику. Саме параметри роблять методи гнучкими й придатними для повторного використання.

Формальні та фактичні параметри методу

Синтаксис параметрів

Параметри оголошуються у круглих дужках після назви методу через кому. Кожен параметр складається з типу та імені:

тип_результату НазваМетоду(тип1 параметр1, тип2 параметр2, ...)
{
    // тіло
}

Наприклад, метод реєстрації пацієнта, що приймає ім'я та вік:

Метод RegisterPatient має два параметри: name типу string та age типу int. При кожному виклику він отримує нові значення та виводить рядок із ними. Один і той самий метод, три різних результати.

Формальні та фактичні параметри (аргументи)

У C# використовуються два терміни для позначення параметрів:

  • Формальні параметри — імена та типи, що оголошуються у визначенні методу. У прикладі вище — name та age. Вони існують лише всередині тіла методу.
  • Фактичні параметри (аргументи) — конкретні значення, що передаються при виклику. У виклику RegisterPatient("Іван Петренко", 45) аргументами є рядок "Іван Петренко" та ціле число 45.

При виклику аргументи передаються параметрам за позицією — зліва направо у порядку, в якому вони оголошені. Перший аргумент стає першим параметром, другий — другим тощо.

Аргументами можуть бути не тільки літерали, а й змінні та складні вирази:

Аргументом bp - 100 є результат арифметичного виразу — компілятор обчислює його значення перед передачею в метод.

Якщо як аргумент передається змінна, вона повинна мати значення на момент виклику. Передача неініціалізованої змінної є помилкою компіляції.

Відповідність типів

Кожен аргумент повинен відповідати типу відповідного формального параметра або допускати неявне перетворення до нього. Компілятор перевіряє це ще до виконання програми:

Типи byte, short, int є числами різного розміру: byte вміщується в int, тому таке перетворення безпечне й автоматичне. Проте передати рядок замість числа або навпаки неможливо — компілятор виявить це одразу:

LogPressure(180, "P-003"); // ✗ Помилка: int і string поміняні місцями

Необов'язкові параметри зі значенням за замовчуванням

За замовчуванням при виклику методу необхідно передати значення для кожного оголошеного параметра. Але іноді деякі параметри мають «розумне» значення за замовчуванням і передавати їх явно незручно. C# дозволяє оголошувати необов'язкові параметри: якщо аргумент не передано — використовується задане значення за замовчуванням:

Необов'язкові параметри завжди розташовуються після обов'язкових. Визначити обов'язковий параметр після необов'язкового неможливо — компілятор видасть помилку. Значення за замовчуванням повинне бути константним виразом: літерал, null, true/false або результат const-виразу.

Іменовані параметри

Зазвичай аргументи передаються за позицією — перший аргумент відповідає першому параметру. Але C# дозволяє передавати аргументи за іменем, явно вказуючи, якому параметру призначається значення. Синтаксис: ім'яПараметра: значення:

Іменована передача корисна у кількох ситуаціях:

  1. Пропуск необов'язкових параметрів. Якщо потрібно встановити лише деякі необов'язкові параметри, а не всі підряд — без іменування довелося б передавати значення за замовчуванням явно для кожного пропущеного параметра.
  2. Покращення читабельності. Запис RegisterPatient(name: "Іван", age: 45) зрозуміліший, ніж RegisterPatient("Іван", 45) при читанні незнайомого коду.
  3. Будь-який порядок. Іменовані аргументи можна передавати в довільному порядку, що іноді зручно логічно.

Важливе обмеження: після першого іменованого аргументу всі наступні теж повинні бути іменованими. Змішування позиційних і іменованих аргументів допустиме лише тоді, коли позиційні йдуть перед іменованими.

Розроблено Tomka Yurii · © 2026 ·