1. Функції й методи в C#
Ви вже вивчили чимало команд у C#, тож можете писати доволі складні програми. 10, 20, 30 рядків коду у програмі — це ще не велика програма, чи не так?
А от програма на 100+ рядків — уже велика, і розібратися в її коді доволі складно. Чи можна спростити написання й читання програм із великою кількістю коду?
Так. У цьому допоможуть методи (функції).
Що ж таке метод? Якщо дуже спростити, то метод — це група команд з унікальною назвою. Інакше кажучи, ми об’єднуємо кілька команд в одну групу й даємо їй унікальне імʼя. І все — метод готовий.
Припустімо, у вас є код для малювання кота:
Console.WriteLine(" |\\__/,| (`\\");
Console.WriteLine(" |o_o |__ _) )");
Console.WriteLine(" (____/ (_/ ");
Ось що він виводить:
|\__/,| (`\
|o_o |__ _) )
(____/ (_/
Ви можете просто винести його в окремий метод і малювати скільки завгодно котів:
void WriteCat()
{
Console.WriteLine(" |\\__/,| (`\\");
Console.WriteLine(" |o_o |__ _) )");
Console.WriteLine(" (____/ (_/ ");
}
// Малюємо трьох котів
WriteCat();
WriteCat();
WriteCat();
Коли програму запущено, щоразу під час виконання команди WriteCat() програма виконуватиме всі команди всередині методу WriteCat(). Ми просто створили нову команду (метод), об’єднавши в одну групу кілька команд.
Навіщо потрібні функції:
- Ділять програму на частини, кожна з яких розв’язує своє завдання.
- Спрощують повторне використання: написали один раз — використовуєте скільки завгодно.
- Зменшують імовірність помилок: помилку у функції виправляєте в одному місці.
- Надають коду «імена» для складних дій — читабельність помітно зростає.
Термінологія: функція, метод, процедура
У C# терміни функція і метод зазвичай означають те саме, але є невеликі нюанси.
- Метод — функція, що належить класу або об’єкту (у C# майже все — методи).
- Процедура — функція, що не повертає значення (void-метод).
- Функція — у широкому сенсі будь-яка іменована частина програми, яку можна викликати.
Офіційно в C# усе це називають методами, але якщо випадково далі зустрінете «функцію» — не лякайтеся!
2. Синтаксис оголошення методу: розбір по поличках
Розберімо найпростішу функцію — класичну «Hello, World!», тільки винесемо її виведення в окремий метод:
using System;
class Program
{
static void Main()
{
PrintHello();
}
static void PrintHello() // Виводимо текст Hello, World!
{
Console.WriteLine("Hello, World!");
}
}
Розбір синтаксису:
| Частина | Приклад | Опис |
|---|---|---|
| Модифікатор | |
Вказує, що метод належить класу (детальніше — далі) |
| Тип повертаємого значення | |
Тип значення, що повертається |
| Імʼя методу | |
Імʼя методу, за яким його викликають |
| Параметри | |
Параметри (порожньо — немає параметрів) |
| Тіло методу | |
Код, що виконується під час виклику методу |
Аналогія:
Метод можна уявити як кавовий автомат: ви кладете гроші (аргументи), натискаєте кнопку (викликаєте метод), автомат варить каву (тіло методу) й видає результат (повертає значення) — або не видає, якщо це void-метод!
3. Як викликати методи
Виклик методу — це просто його імʼя та круглі дужки, і все:
PrintHello(); // Метод без параметрів
int sum = Add(2, 3); // Метод з параметрами та результатом
Важливо: викликати метод можна лише після його оголошення (або якщо воно розташоване «вище» у коді, або знаходиться в тому самому класі).
4. Методи з параметрами
У метод можна передавати параметри. Це робить поведінку методу гнучкою та налаштованою під різні випадки. Фактично параметри — це змінні методу, яким присвоюють значення під час виклику. Параметри треба вказувати під час створення методу.
static void Greet(string name)
{
Console.WriteLine($"Привіт, {name}!");
}
// Використання:
Greet("Аліса");
Greet("Боб");
Параметри — це змінні, значення яких ви передаєте методу під час виклику.
| Частина | Приклад | Опис |
|---|---|---|
| Тип параметра | |
Тип значення, яке приймає метод |
| Імʼя параметра | |
Імʼя, яке використовують у методі |
Виклики:
Greet("Аліса"); — name отримує значення "Аліса".
Кілька параметрів
Можна оголосити кілька параметрів через кому:
static void PrintSum(int a, int b)
{
Console.WriteLine($"Сума: {a + b}");
}
// Використання:
PrintSum(5, 7); // Сума: 12
5. Параметри-значення і параметри-посилання
Параметри функції — це звичайні змінні, до яких застосовують ті самі правила, що й до інших змінних.
Варто пам’ятати: коли ви передаєте у метод масив, ви передаєте посилання на масив, тож метод може змінити вміст масиву. Для простих типів (int, double) копіюється значення.
static void ZeroFirstGrade(int[] grades)
{
grades[0] = 0; // Змінює оригінальний масив!
}
// Використання:
int[] a = {1, 2, 3, 4, 5};
ZeroFirstGrade(a);
Console.WriteLine(a[0]); // Виведе 0
Фактично відбувається ось що:
static void ZeroFirstGrade(int[] grades)
{
grades[0] = 0; // Змінює оригінальний масив!
}
// Використання:
int[] a = {1, 2, 3, 4, 5};
//ZeroFirstGrade(a);
int[] grades = a;
grades[0] = 0;
Console.WriteLine(a[0]); // Виведе 0
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ