Возвращаемое значение

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

Если метод должен возвращать данные, перед именем метода нужно указать возвращаемый тип. При отсутствии возвращаемого значения используется модификатор void.

Оператор return допустимо использовать и в методах без возвращаемого значения, но не нужно указывать значение после него, достаточно написать просто return;. Он завершает выполнение метода, последующий код не запустится, управление вернётся в точку вызова.

    int Add(int a, int b)  // Возвращает значение типа int
    {
        return a + b;
    }Code language: JavaScript (javascript)
    void SayHi() // Нет возвращаемого значения
    {
        Console.WriteLine("hello welcome to foxdevelop.com");
    }Code language: JavaScript (javascript)

1. Методы с возвращаемым значением обязательно используют конструкцию return выражение;. Тип результата выражения должен совпадать с объявленным возвращаемым типом;

    int Add(int a, int b)
    {
        return 1.2;  // Ошибка. 1.2 имеет тип double, не поддерживается неявное преобразование в int, несоответствие типов вызывает ошибку
    }Code language: JavaScript (javascript)

В данном коде попытка вернуть значение типа double. Литерал 1.2 по умолчанию относится к типу double, то есть к числам с плавающей точкой (десятичным дробям). Компилятор не может автоматически преобразовать дробное число в целое, поэтому появляется ошибка.

Рассмотрим обратный случай

    double Add2()
    {
        return 10;  // 10 имеет тип int, поддерживается неявное преобразование в double, типы совместимы, ошибки нет
    }

Такой код работает без ошибок. Хотя число 10 является целым, допускается его неявное преобразование в double, поэтому типы совместимы. Не сравнивайте только названия типов, всегда проверяйте возможность неявного преобразования.

Неявное преобразование — это преобразование типов, которое выполняет компилятор автоматически, без дополнительного кода от разработчика. Преобразования, прописанные программистом вручную, называются явными.

Подробнее о преобразовании типов мы изучим позже.

2. Каждый возможный путь выполнения внутри метода с возвращаемым значением обязательно должен доходить до оператора return. Не допускается ветвь, завершающаяся без возврата значения.

Указанный метод объявлен как возвращающий int (int перед именем Add). Если в теле метода отсутствует оператор return, появится ошибка компиляции.

Такой вариант кода также вызовет ошибку. Оператор return выполнится только при истинном условии в блоке if. При условии a >= b оператор return не сработает, образуется ветка без возврата значения.

Даже при добавлении блока else ошибка сохранится, если внутри него нет оператора return — остаются ветви без возврата. Это правило действует для всех операторов управления потоком. Нужно обеспечить корректную обработку всех путей выполнения.

Существует способ исправить ситуацию: добавить оператор return в самом конце метода как запасной вариант. Пример:

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

        }
        return -1; // Независимо от предыдущих ветвей, при достижении этой строки возвращается значение
        // Число -1 используется как запасное возвращаемое значение.
    }

Возвращаемые значения поддерживают все типы данных: базовые типы (int, string и т.д.), пользовательские классы, коллекции и другие;

Оператор return немедленно останавливает выполнение текущего метода, весь последующий код не запускается;

Вызовы методов с возвращаемым значением можно напрямую встраивать в выражения, команды вывода, присваивания и другие участки кода.

Возвращаемое значение

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *