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-метода!
}
2
Задача
C# SELF, 8 уровень, 3 лекция
Недоступна
Метод, возвращающий строку с приветствием
Метод, возвращающий строку с приветствием
2
Задача
C# SELF, 8 уровень, 3 лекция
Недоступна
Метод для проверки числа на чётность
Метод для проверки числа на чётность
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Slevin Уровень 11
23 января 2026
А вот задача на return была 2 лекции назад...