JavaRush /Курси /C# SELF /Повернене значення та оператор return

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

C# SELF
Рівень 8 , Лекція 3
Відкрита

1. Вступ

Давайте уявімо: ви замовляєте піцу телефоном (або через застосунок — адже XXI століття). Ви повідомляєте оператору параметри замовлення, і він повертає результат: піцу! Якщо оператор мовчить — ви голодні, і радості мало.

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

  • Функція рахує суму двох чисел і повертає результат.
  • Функція отримує вік людини й повертає категорію («дитина», «дорослий», «пенсіонер»).
  • Функція формує приємний рядок привітання користувача за імʼям.

Повернене значення — спосіб для функції «передати» назовні результат своєї роботи.

2. Сигнатура методу з поверненим значенням

У попередній лекції ми бачили такий шаблон:

void PrintHello()
{
    Console.WriteLine("Привіт!");
}
Метод без поверненого значення ( void)

Тип void означає, що функція нічого не повертає (void — «порожньо», відсутність значення).

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

int Add(int a, int b)
{
    // тіло функції
}
Метод із поверненим значенням ( int)

Тут int перед іменем функції — це тип даних поверненого значення. Якщо функція повертає рядок — пишемо string; якщо дробове число — double; тощо.

Синтаксис оголошення функції виглядає так:

<тип повертаємого значення> Ім'яМетоду(<параметри>)
{
    // тіло функції
}
Загальний шаблон методу з поверненим значенням

Приклади різних сигнатур:

Сигнатура Що повертає
int Sum(int a, int b)
Ціле число
string GetGreeting(string name)
Рядок
double Multiply(double x, double y)
Дробове число
bool IsAdult(int age)
Логічне значення

3. Оператор return: як повернути результат з функції

Щоб усе працювало, замало просто вказати потрібний тип — потрібно навчити функцію відправляти результат назад «нагору». За це відповідає оператор return. Ним ми повідомляємо: ось значення, яке повертаємо; на цьому функція завершує виконання (ніби «виходить» назовні).

тип Ім'яМетоду(...)
{
    // якісь обчислення
    return значення;
}
Схема використання return

Приклад:

int Add(int a, int b)
{
    int sum = a + b;
    return sum; // повертаємо суму як результат роботи функції
}

Важливе правило: тип значення, яке повертається через return, має повністю збігатися (або бути сумісним) з типом, який ви вказали у сигнатурі методу.

4. Приклади: пишемо методи, які щось повертають

Давайте одразу розберемося на прикладах! Погляньмо на кілька популярних випадків.

Приклад 1: додавання двох чисел

int Add(int a, int b)
{
    return a + b;
}

// Використання:
int result = Add(10, 20);
Console.WriteLine("Сума: " + result); // Вивід: Сума: 30

Приклад 2: індивідуальне привітання

string CreateGreeting(string name)
{
    return "Привіт, " + name + "!";
}

// Використання:
string greeting = CreateGreeting("Анна");
Console.WriteLine(greeting); // Вивід: Привіт, Анна!

Приклад 3: перевірка повноліття

bool IsAdult(int age)
{
    return age >= 18;
}

if (IsAdult(21))
{
    Console.WriteLine("Вхід дозволено.");
}
else
{
    Console.WriteLine("Вибачте, лише для дорослих.");
}
// Вивід: Вхід дозволено.

Приклад 4: повернене значення та використання у виразах

Console.WriteLine("Вдвічі більше: " + MultiplyByTwo(7));

int MultiplyByTwo(int n)
{
    return n * 2;
}

5. Тип поверненого значення: різноманіття та особливості

У C# функція може повертати будь-який тип даних. Ось кілька поширених варіантів:

  • Цілі числа: int, long, short — усе просто.
  • Дробові: double, float, decimal.
  • Рядки: string.
  • Булеві: bool.
  • Масиви: int[], string[] тощо.
  • Посилальні типи: об’єкти класів, створених вами.
  • void: особливий випадок, коли нічого не повертається.

Чому тип поверненого значення такий важливий?

Компілятор суворо стежить за тим, щоб ви повертали те, що пообіцяли. Якщо пообіцяли повернути int, а намагаєтеся повернути рядок або взагалі нічого — отримаєте помилку.

Приклад помилки:

int GetNumber()
{
    return "42"; // Помилка! Очікувався int, а не string.
}

6. Оператор return без значення: для void-методів

До речі, у методах, для яких оголошено тип повернення (наприклад, int, string), оператор return завжди має супроводжуватися значенням, яке ви хочете повернути.

Але якщо функцію оголошено з типом void, ви все одно можете використовувати return без значення — щоб негайно завершити виконання функції.

void PrintNumbers(int n)
{
    if (n <= 0)
    {
        Console.WriteLine("Число не повинно бути відʼємним!");
        return; // Просто виходимо з функції, нічого не повертаючи
    }
    for (int i = 1; i <= n; i++)
    {
        Console.WriteLine(i);
    }
}
return без значення у void-методі

Це зручно, якщо ви хочете перервати виконання функції за якоюсь умовою, але повертати нічого не потрібно.

7. Типові помилки при використанні return

Початківці часто ламають голову над помилками, пов’язаними з return.

Проблема № 1: немає return у функції, яка має щось повертати

int GetValue(bool flag)
{
    if (flag)
        return 1;
    // А якщо flag == false?
}
// Помилка: не всі гілки коду містять return!

Рішення: завжди передбачайте return в усіх сценаріях виконання функції. Наприклад:

int GetValue(bool flag)
{
    if (flag)
        return 1;
    else
        return 0;
}

Проблема № 2: невідповідність типу поверненого значення

double GetMagicNumber()
{
    return 42; // Загалом коректно (int неявно перетворюється на double)
    // Але якби функція повертала int, а ми повернули рядок — отримали б помилку!
}

Правило: стежте за сумісністю типів. Якщо є сумніви — можете явно перетворити до потрібного типу:

return (double)42;

Проблема № 3: передчасний return

Знайте: щойно виконується return, виконання методу миттєво переривається. Усе, що написано далі, не виконається!

int GetNumber()
{
    return 5;
    Console.WriteLine("Цей рядок ніколи не буде виконаний"); // компілятор навіть поскаржиться!
}

Проблема № 4: return у void-методі зі значенням (заборонено!)

void PrintSomething()
{
    return 1; // Не можна повертати значення з void-методу!
}
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ