Перейти до основного вмісту

Повернене значення та оператор return

Метод може повертати значення, деякий результат. У наведеному вище прикладі було визначено два методи, які мали тип void. Методи з таким типом не повертають жодного значення. Вони просто виконують деякі дії.

Але методи також можуть повертати деяке значення. Для цього використовується оператор return, після якого вказується повернене значення:

return return value;

Наприклад, визначимо метод, який повертає значення типу string:

string GetMessage()
{
return “Hello”
}

Метод GetMessage має тип string, тому він повинен повертати рядок. Ось чому в тілі методу використовується оператор return, після якого вказується повернений рядок.

При цьому методи, які мають будь-який тип, відмінний від void як тип повернення, обов'язково повинні використовувати оператор return для повернення значення. Наприклад, наступне визначення методу є неправильним:

string GetMessage()
{
Console.WriteLine(“Hello”);
}

Також повинна бути відповідність між типом повернення методу і значенням, яке повертається після оператора return. Наприклад, у наступному випадку тип повернення — string, але метод повертає число (тип int), тому це визначення методу є неправильним:

string GetMessage()
{
return 3; // Error! The method should return a string, not a number
}

Результат методів, що повертають значення, ми можемо присвоювати змінним або використовувати іншим способом у програмі:

string GetMessage()
{
return “Hello”
}

string message = GetMessage(); // get the result of the method into the variable message
Console.WriteLine(message); // Hello

Метод GetMessage() повертає значення типу string. Тому ми можемо присвоїти це значення деякій змінній типу string: string message = GetMessage();

Або навіть передати його як значення параметру іншого методу:

string GetMessage()
{
return “Hello”
}
void PrintMessage(string message)
{
Console.WriteLine(message);
}
PrintMessage(GetMessage());

У виклику PrintMessage(GetMessage()) спочатку викликається метод GetMessage(), і його результат передається в параметр message методу PrintMessage.

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

int Sum(int x, int y)
{
return x + y;
}

int result = Sum(10, 15); // 25
Console.WriteLine(result); // 25

Console.WriteLine(Sum(5, 6)); // 11

Метод Sum() має тип int, тому він повинен повертати значення типу int — ціле число. Тому в тілі методу використовується оператор return, після якого йде число, яке повертається (в даному випадку, результат суми змінних x та y).

Скорочена версія методів з результатом

Ми також можемо скоротити методи, що повертають значення:

string GetMessage()
{
return “hello”
}

подібно до наступного методу:

string GetMessage() => “hello”;

І метод

int Sum(int x, int y)
{
return x + y;
}

подібний до наступного методу:

int Sum(int x, int y) => x + y;

Вихід із методу

Оператор return не тільки повертає значення, але й виходить із методу. Тому він повинен бути визначений після інших інструкцій. Наприклад:

string GetHello()
{
return “Hello”;
Console.WriteLine(“After return);
}

З точки зору синтаксису, цей метод є правильним, але його інструкція Console.WriteLine(“After return”) безглузда — вона ніколи не буде виконана, тому що до її виконання оператор return поверне значення та вийде з методу.

Однак ми можемо використовувати оператор return у методах з типом void. У цьому випадку після оператора return не вказується жодне значення (оскільки метод нічого не повертає). Типова ситуація — це вихід з методу залежно від певних умов:

void PrintPerson(string name, int age)
{
if(age > 120 || age < 1)
{
Console.WriteLine(“Invalid age”);
return;
}
Console.WriteLine($“Name: {name} Age: {age});
}

PrintPerson(“Tom”, 37); // Name: Tom Age: 37
PrintPerson(“Dunkan”, 1234); // Invalid age

Тут метод PrintPerson() приймає ім'я та вік користувача як параметри. Однак у методі ми спочатку перевіряємо, чи відповідає вік певному діапазону (менше 120 і більше 0). Якщо вік виходить за межі цього діапазону, ми виводимо повідомлення про недійсний вік та виходимо з методу за допомогою оператора return. Після цього метод завершує свою роботу.

Однак, якщо вік коректний, ми виводимо інформацію про користувача в консоль. Виведення в консоль:

Name: Tom Age: 37
Invalid age