Java

Правильно ли я понимаю return и void?

Мы используем return если хотим чтобы это значение ХРАНИЛОСЬ в переменной.
Мы используем void метод если значение нигде не будет храниться. То есть к примеру есть метод но он void и он рассчитывает объем фигуры. Но значение рассчитанного объема не будет храниться где-либо. Она просто будет выводиться при вызове метода. Правильно ли я понял?
У функции есть возвращаемое значение, её результат. Для возврата значения используется "return значение". Если функция не возвращает результат (и по сути не является функцией), то она имеет тип void. В этом случае функция всё равно может возвращать значение (или даже несколько значений), но неявно, каким-то другим способом.
Возвращаемое значение может не храниться в переменной. Оно может сразу теряться или использоваться "на лету": например так:
y = sqrt(sin(x)) + 1;
Тут значение sin не хранится в переменной, а передаётся в функцию sqrt. И результат sqrt тоже не хранится в переменной, а складывается с единицей.
Дмитрий Боровских
Дмитрий Боровских
58 065
Лучший ответ
Неправильно.
Ничто не мешает тебе использовать return, даже если метод объявлен как void.

Например:

void Foo()
{
return;
}

ВНЕЗАПНО работает же, да?
Евгений
Евгений
83 263
Геннадий Рахматулин ничто не мешает?)))
если в Экслипсе рабоаете, попробуйте поставить плаги SonarLint
он сразу прикапается к такому return
хотя плагин скорее полезный, чем надоедливый...
да и настраиваемый...
return означает "передача контроля вызываещему коду"
Илья Лилов
Илья Лилов
50 255
лучше всего понять как это работает на уровне машинных команд, стека, регистров, языка ассемблера. Тогда станет ясно, как происходит вызов функций, передача параметров, возврат, почему возможна рекурсия
Нет не совсем так.
return это выход из функции. В функции может быть далеко не один return. То что стоит после слова return при выходе из функции "появится" на месте где была вызвана функция. Пример:

double sum(double a, double b)
{
return a + b; //вернет сумму a и b
}

sum(10.3, 5.5); //тут появится результат сложения чисел 10.3 плюс 5.5 - 15.8. Но так как мы с результатом ничего не делаем то он "пропадет".

double result = sum(10.3, 5.5); //в данном случае на месте вызова функции sum появится результат сложения. И код будет равносилен такому
double result = 15.8;

void это тип возвращаемого значения. И этот тип говорит что мы не собираемся ничего возвращать из функции. То есть предполагается что на месте вызова функции ничего не "появится".