Зачем нужен return в функциях
Перейти к содержимому

Зачем нужен return в функциях

  • автор:

Оператор return (C)

Оператор return завершает выполнение функции и возвращает управление вызывающей функции. Выполнение возобновляется в вызывающей функции в точке сразу после вызова. Оператор return может возвращать значение, передавая его вызывающей функции. Дополнительные сведения см. в статье Тип возвращаемого значения.

Синтаксис

jump-statement :
return expression необ. ;

Значение expression , если оно имеется, возвращается вызывающей функции. Если expression параметр опущен, возвращаемое значение функции не определено. Параметр «выражение», если он присутствует, вычисляется и преобразуется к типу, возвращаемому функцией. Если оператор return содержит выражение в функциях, имеющих тип возвращаемого значения void , то компилятор выдает предупреждение, а выражение не вычисляется.

Если в определении функции оператор return не указан, то после выполнения последнего оператора вызванной функции управление автоматически возвращается вызывающей функции. В этом случае возвращаемое значение вызванной функции не определено. Если функция имеет тип возвращаемого значения, отличный от void , это считается серьезной ошибкой и компилятор выводит предупреждающее диагностическое сообщение. Если функция имеет тип возвращаемого значения void , то такое поведение приемлемо, но может считаться плохим стилем. Чтобы ваше намерение было понятным, используйте простой оператор return .

В качестве лучшей методики разработки рекомендуется всегда указывать тип возвращаемого значения для ваших функций. Если возвращаемое значение не требуется, объявите функцию как имеющую тип возвращаемого значения void . Если тип возвращаемого значения не указан, компилятор C предполагает, что по умолчанию используется тип возвращаемого значения int .

Многие программисты используют круглые скобки для заключения expression аргумента return оператора . Однако использовать эти скобки в языке C необязательно.

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

В функции main оператор return и выражение являются необязательными. То, что происходит с указанным возвращаемым значением, зависит от реализации. Только для Майкрософт:реализация C от Майкрософт возвращает значение выражения процессу, вызвавшему программу, например cmd.exe . Если выражение return не указано, среда выполнения C от Майкрософт возвращает значение, соответствующее успешному (0) или неудачному (ненулевое значение) выполнению.

Пример

В этом примере показана одна программа из нескольких частей. Она демонстрирует оператор return и использование его для завершения выполнения функции и, при необходимости, возврата какого-то значения.

// C_return_statement.c // Compile using: cl /W4 C_return_statement.c #include // for INT_MAX #include // for printf long long square( int value ) < // Cast one operand to long long to force the // expression to be evaluated as type long long. // Note that parentheses around the return expression // are allowed, but not required here. return ( value * (long long) value ); >

Функция square возвращает квадрат своего аргумента, используя более широкий тип для избежания арифметической ошибки. Только для систем Майкрософт: в реализации C от Майкрософт тип long long достаточно велик, чтобы вмещать произведение двух значений int без переполнения.

Скобки вокруг выражения return в функции square вычисляются как часть выражения, и использовать их в операторе return не требуется.

double ratio( int numerator, int denominator ) < // Cast one operand to double to force floating-point // division. Otherwise, integer division is used, // then the result is converted to the return type. return numerator / (double) denominator; >

Функция ratio возвращает частное двух int аргументов в виде значения double с плавающей запятой. Выражение return принудительно использует операцию с плавающей запятой путем приведения одного из операндов к типу double . В противном случае будет использоваться оператор целочисленного деления, а дробная часть будет потеряна.

void report_square( void ) < int value = INT_MAX; long long squared = 0LL; squared = square( value ); printf( "value = %d, squared = %lld\n", value, squared ); return; // Use an empty expression to return void. >

Функция report_square вызывает square со значением параметра INT_MAX — самым большим целым числом со знаком, которое помещается в int . Результат типа long long сохраняется в squared , а затем выдается в выводе. Функция report_square имеет тип возвращаемого значения void , поэтому она не содержит выражения в операторе return .

void report_ratio( int top, int bottom ) < double fraction = ratio( top, bottom ); printf( "%d / %d = %.16f\n", top, bottom, fraction ); // It's okay to have no return statement for functions // that have void return types. >

Функция report_ratio вызывает ratio со значениями параметров 1 и INT_MAX . Результат типа double сохраняется в fraction , а затем выдается в выводе. Функция report_ratio имеет тип возвращаемого значения void , поэтому явно возвращать значение не требуется. Выполнение report_ratio не дает результата и не возвращает вызывающей функции никакого значения.

int main()

Функция main вызывает две функции: report_square и report_ratio . Поскольку report_square не принимает параметров и возвращает void , результат не присваивается переменной. Аналогичным образом функция report_ratio возвращает void , поэтому ее возвращаемое значение тоже не сохраняется. После вызова каждой из этих функций выполнение продолжается в следующем операторе. Затем main возвращает значение 0 (обычно свидетельствующее об успешном выполнении), чтобы завершить программу.

Чтобы скомпилировать пример, создайте файл исходного кода с именем C_return_statement.c . Затем скопируйте весь пример кода в показанном здесь порядке. Сохраните файл и скомпилируйте его в окне Командной строки разработчика с помощью следующей команды:

cl /W4 C_return_statement.c

После этого, чтобы запустить пример кода, введите C_return_statement.exe в командной строке. Выходные данных в этом примере выглядят следующим образом:

value = 2147483647, squared = 4611686014132420609 1 / 2147483647 = 0.0000000004656613 

Зачем нужен return вообще кроме окончания функцыи?

Зачем нужен return вообще кроме окончания функции?
Знаю что для возвращения например return 2+2;
На протяжения всего JS я юзал его только что бы закончить функцию или условие.
Но не понимаю суть, пожалуйста об ясните.
Я вот не как не могу разобраться. 🙁

  • Вопрос задан более трёх лет назад
  • 3508 просмотров

7 комментариев

Простой 7 комментариев

notiv-nt

для возвращения результата исполнения функции

Drino955

Drino955 Jug @Drino955 Автор вопроса
Михаил, ну я это понимаю, но пожалуйста об’ясни.
Как он применяется ?

yarkov

Алексей Ярков @yarkov Куратор тега JavaScript
Dimazik123 Nik, так и применяется. В конце функции пишешь return ЧТОТОТАМ .

notiv-nt

Dimazik123 Nik, У меня есть ложка, я знаю что ей едят еду, но как её применять, я НЕПОНИМАЮ

Drino955

Drino955 Jug @Drino955 Автор вопроса
Михаил, так и есть с return. Я просто не понимаю как его можно применить

notiv-nt

Dimazik123 Nik, изучайте дальше, тогда и поймете зачем что-то где-то возвращать

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

function add(a, b) < return a+b; >function subtract(a, b) < return a-b; >var num1 = add(2, 2); var answer = subtract(num1, 3); console.log(answer);

Думаю вы видите как используеться тут return

Решения вопроса 1

potapchino

alex @potapchino

функция всегда что-то возвращает. чтобы указать, что именно функция должна возвратить, используется ключевое слово return. это и есть его суть. даже если его(return) нет в теле функции, функция все равно вернет undefined по умолчанию.

spoiler
эта функция вернет undefined, т.к. ключевого слова return нет.

function func() < var a = 5; var b = 10; var sum = a + b; >var result = func() console.log(result) // undefined

эта функция вернет строку ‘i love js’, т.к. вы явно на это указали с помощью ключевого слова return.

function func() < var a = 5; var b = 10; var sum = a + b; return 'I love js'; >var result = func() console.log(result) // 'I love js'

вернет сумму двух чисел

function func() < var a = 5; var b = 10; var sum = a + b; return sum; >var result = func() console.log(result) // 15

вернет сумму двух чисел

function func(a, b) < var sum = a + b; return sum; >var result = func(3, 7) console.log(result) // 10
function func(a, b) < return a + b; >var result = func(2, 2) console.log(result) // 4

следующие две функции возвращают undefined. первая явно, вторая неявно

function func1() < return undefined; >var result = func1() console.log(result) // undefined function func2() < >var result = func2() console.log(result) // undefined

вернет другую функцию

function func() < return function () < return 'ааа сложнааа' >; > var result = func() var result2 = result() console.log(result) // function func() console.log(result2) // 'ааа сложнааа' console.log(func()()) // 'ааа сложнааа'

как только в функции встречается это ключевое слово, интерпретатор немедленно останваливает выполненние функции(выходит из нее) и возвращает то что написано после этого ключевого слова. именно поэтому этот цикл выполнит всего лишь одну итерацаю, а не 100, как и должно, и вернет 1.

function func() < for (var i = 1; i < 100; i = i + 1) < return i >> var result = func() console.log(result) // 1

а вот так вернет 100

function func() < for (var i = 1; i < 100; i = i + 1) < >return i > var result = func() console.log(result) // 100

а вот так вернет undefined

function func() < for (var i = 1; i < 100; i = i + 1) < >return > var result = func() console.log(result) // undefined

Для чего нужен return?

Возможно, я невероятно глупый человек (хоть я себя таковым и не считаю), но хоть убейте не могу понять, что делает запись «return 0», «return *какая-то переменная*» и т.д.
Смотрю видео-обучение и там человек написал вот такой код

#include void print (float number) < printf ("Your number is %.2f\n", number); >float del (float a, float b) < float res; if (b != 0) res = a / b; else res = 0; return res; >int main ()

Читал вопросы других людей, и все равно не могу понять. Как я понял, одна из функций записи return — это остановка данной функции (это если написать 0).
Но что делает «return res» во втором куске кода? То есть в переменную res записывается деление числа А и Б. А потом оно куда-то там возвращается.. (Я чайник тот еще, поэтому если можете объяснить, то как можно понятнее). Спасибо.

  • Вопрос задан более трёх лет назад
  • 7353 просмотра

2 комментария

Простой 2 комментария

return

Оператор return завершает выполнение текущей функции и возвращает её значение.

Интерактивный пример

Синтаксис

return [[выражение]];

Выражение, значение которого будет возвращено. Если не указано, вместо него возвращается undefined .

Описание

При вызове оператора return в функции её выполнение прекращается. Указанное значение возвращается в место вызова функции. Например, приведённая ниже функция возвращает возведённое в квадрат значение своего аргумента, x (где x – это число):

function square(x)  return x * x; > var demo = square(3); // значение demo будет равняться 9 

Если возвращаемое значение не указано, вместо него возвращается undefined .

Следующие выражения всегда прерывают выполнение функции:

return; return true; return false; return x; return x + y / 3; 

Автоматическая расстановка точек с запятыми

На выражение return влияет автоматическая расстановка точек с запятыми (ASI). Разрыв строки не допускается между ключевым словом return и выражением.

return a + b; 

трансформируется ASI в:

return; a + b; 

В консоли появится предупреждение «unreachable code after return statement».

Примечание: Начиная с Gecko 40, предупреждение в консоли появляется, если обнаружен недостижимый код после return .

Для того, чтобы избежать данной проблемы (предотвратить ASI), можно использовать скобки:

return ( a + b; ); 

Примеры

Прерывание функции

Функция немедленно останавливается в точке, где вызывается return .

function counter()  for (var count = 1; ; count++)  // бесконечный цикл console.log(count + "A"); // до 5 if (count === 5)  return; > console.log(count + "B"); // до 4 > console.log(count + "C"); // никогда не появляется > counter(); // Выводит: // 1A // 1B // 2A // 2B // 3A // 3B // 4A // 4B // 5A 

Возвращение функции

Смотрите также статью о замыканиях.

function magic(x)  return function calc(x)  return x * 42; >; > var answer = magic(); answer(1337); // 56154 

Спецификации

Specification
ECMAScript Language Specification
# sec-return-statement

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

This page was last modified on 7 авг. 2023 г. by MDN contributors.

Your blueprint for a better internet.

MDN

Support

  • Product help
  • Report an issue

Our communities

Developers

  • Web Technologies
  • Learn Web Development
  • MDN Plus
  • Hacks Blog
  • Website Privacy Notice
  • Cookies
  • Legal
  • Community Participation Guidelines

Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2024 by individual mozilla.org contributors. Content available under a Creative Commons license.

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

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