Функція являє собою невелику підпрограму. Якщо програма - це рішення якоїсь прикладної задачі, функція – це теж рішення, тільки вже в рамках програми і, відповідно, вона виконує завдання «попроще». Функції дозволяють зменшити розмір програми за рахунок того, що не потрібно повторно писати якийсь фрагмент коду - ми просто викликаємо скільки завгодно і де потрібно оголошену функцію.
Функції в Сі-шарп також називають методами. Між цими двома поняттями різниця невелика, та тут ми будемо використовувати термін функція.
До цього, ми весь код писали у функції main. Функція є головною функцією програми і точкою входу програми. Будь-яка функція в Сі-шарп може бути оголошена тільки в рамках класу, так як C# - повністю об'єктно-орієнтована мова програмування (ООП). Оголошення користувацької функції всередині іншої функції (наприклад main) неприпустимо. Оголошення функції має наступну структуру:
[модифікатор доступу] [тип повертаного значення] [ім'я функції] ([аргументи])
{
// тіло функції
}
Модифікатор доступу (області видимості) може бути public, private, protected, internal. Для чого це потрібно будемо говорити в окремому уроці, а поки будемо скрізь використовувати public. Між модифікатором і типом може стояти ключове слово static, що означає, що функція буде статичною. Докладно говорити про статичних функцій і змінних ми будемо в окремому уроці. Скажу тільки, що з статичною функції можна викликати інші функції, якщо вони теж статичні. Головна функція main – завжди static, тому всі функції в цьому уроці ми будемо повідомляти також статичними.
Функція може повертати або не повертати. Якщо функція, наприклад, повертає ціле число, то потрібно вказати тип int. Якщо функція не повертає ніякого значення, то для цього використовується ключове слово void. Функції, які не повертають значення, ще називають процедурами. Називати функції варто так, щоб ім'я відображало суть функції. Використовуйте дієслова або словосполучення з дієсловами. Приклади: GetAge(), Sort(), SetVisibility().
Аргументи – це ті дані, які необхідні для виконання функції. Аргументи записуються у форматі [тип] [ідентифікатор]. Якщо кілька аргументів, вони відокремлюються комою. Аргументи можуть бути відсутніми. Перший рядок функції, де вказуються тип, ім'я, аргументи і т. д. називається заголовком функції.
Приклад функції, яка не повертає значення
Напишемо просту функцію, яка буде замінювати в масиві рядків вказане ім'я на інше. Дана функція буде приймати три аргументи: масив рядків, ім'я, яке необхідно замінити і нове ім'я. Так як функція не повертає значення, вказуємо тип void перед ім'ям функції.
public static void ReplaceName(string[] names, string name, string newName)
{
for (int i=0; i < names.Length; i++)
{
if (names[i] == name)
names[i] = newName;
}
}
Сама функція дуже проста. Проходимо в циклі за елементами і дивимося, дорівнює чи елемент зазначеному імені. Якщо так, то замінюємо його на нове ім'я. Функція написана, і тепер використовуємо її:
class Program
{
public static void ReplaceName(string[] names, string name, string newName)
{
for (int i=0; i < names.Length; i++)
{
if (names[i] == name)
names[i] = newName;
}
}
static void Main(string[] args)
{
string[] names = { "Sergey", "Maxim", "Андрій", "Oleg", "Андрій", "Ivan", "Sergey" };
ReplaceName(names, "Андрій", "Nikolay"); // виклик функції. Всі рядки "Andrey" в масиві будуть замінені на "Nikolay"
ReplaceName(names, "Ivan", "Vladimir");
}
}
Після виклику функції два рази у цій програмі, масив буде виглядати так: "Sergey", "Maxim", " Nikolay ", "Oleg", " Nikolay ", " Vladimir ", "Sergey".
Приклад функції, яка повертає значення
Напишемо функцію, яка буде знаходити максимальне число в масиві. Аргумент цієї функції буде один – масив цілих чисел. Тип значення, що повертається – ціле число int.
public static int GetMax(int[] array)
{
int max = array[0];
for (int i = 1; i < array.Length; i++)
{
if (array[i] > max)
max = array[i];
}
return max;
}
Логіка функції проста. Створюємо змінну max, в яку записуємо перший елемент масиву. Далі в циклі порівнюємо кожен елемент зі значенням max, якщо елемент більше, ніж max, то записуємо в max цей елемент. Наприкінці функції використовуємо оператор return, щоб повернути наш результат. Оператор return повинен бути обов'язково у функції, яка повертає значення.
Використовуємо нашу функцію:
class Program
{
public static int GetMax(int[] array)
{
int max = array[0];
for (int i = 1; i < array.Length; i++)
{
if (array[i] > max)
max = array[i];
}
return max;
}
static void Main(string[] args)
{
int[] numbers = { 3, 32, 16, 27, 55, 43, 2, 34 };
int max;
max = GetMax(numbers); //виклик такої функції можна використовувати при присвоєнні значення
Console.WriteLine(GetMax(numbers)); // виклик функції також можна використовувати як аргумент при виклику функції. WriteLine() – теж функція.
Console.ReadKey();
}
}
Результат роботи програми:
Оператор return
Коли зустрічається цей оператор, відбувається вихід з функції та код нижче (якщо він є) не виконується (наприклад, у функцію передано такий аргумент, при якому немає сенсу виконувати функцію). Він схожий на оператор break, який використовується для виходу із циклів. Цей оператор також можна використовувати і у функціях, які не повертають значення. Оператор return допустимо використовувати кілька разів в функції, але цього робити не рекомендується.
Автор Swytos << попередня • наступна >> До змісту