Как выйти из функции
Перейти к содержимому

Как выйти из функции

  • автор:

Выход из функции

Имеется два способа окончания работы функции и передачи управления вызывающему коду. Первый способ предполагает достижение последнего оператора функции, после чего работа функции заканчивается при встрече >. (Конечно, фигурной скобки на самом деле нет в объектном коде, но никто не мешает нам так думать.) Например, следующая функция выводит на экран строку:

void pr_reverse(char *s)
register int t;
for(t=strlen(s) -1; t > -1; t-) printf («%c», s [t]);
>

После отображения строки функция ничего не делает, поэтому управление передается вызвавшему ее коду.

Тем не менее, не многие функции используют данный метод окончания своего выполнения. Большинство функций используют оператор return для окончания выполнения с целью возврата значения или упрощения кода функции и увеличения его эффективности путем создания нескольких точек выхода. Важно запомнить, что функция может иметь несколько операторов return. Например, функция, показанная ниже, возвращает или индекс первого появления подстроки, указываемой в s1, в строке, указываемой в s2, или —1, если не обнаружено совпадений:

int find_substr (char *s1, char *s2)
register int t;
char *p, *p2;
for(t=0; s1[t]; t++)
p = &s1[t];
p2 = s2;
while (*p2 && *p2==*p)
p++;
p2++;
>
if(!*p2) return t;
>
return -1;
>

Надо обратить внимание, как два оператора return упрощают функцию.

Как выйти из функции

Возможно ли, Выйти из функции, если она возвращает «void». Что-то вроде «return», только без возвращения значения, просто перейти к коду после вызова функции.
Спасибо.

Re: Выйти из функции, если она возвращает «void»?

От: VuDZ
Дата: 26.02.02 23:58
Оценка: 3 (1)

Здравствуйте Алексей, Вы писали:

А>Возможно ли, Выйти из функции, если она возвращает «void». Что-то вроде «return», только без возвращения значения, просто перейти к коду после вызова функции.
А>Спасибо.

void Foo( void )< // do something if (bError) return; // do something another >

Re: Выйти из функции, если она возвращает «void»?

От: SDA
Дата: 26.02.02 23:58
Оценка: 3 (1)

Здравствуйте Алексей, Вы писали:

А>Возможно ли, Выйти из функции, если она возвращает «void». Что-то вроде «return», только без возвращения значения, просто перейти к коду после вызова функции.
А>Спасибо.

void MyFunc() < if(false) return; >
return;

как выйти из функции js

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

function checkNumber(num)  if (num > 10)  return 'Число больше 10'; > return 'Число меньше или равно 10'; > console.log(checkNumber(15)); // "Число больше 10" console.log(checkNumber(5)); // "Число меньше или равно 10" 

В этом примере функция checkNumber принимает один аргумент num . Если num больше 10, функция возвращает строку «Число больше 10». Если num меньше или равно 10, функция возвращает строку «Число меньше или равно 10».

Когда мы вызываем функцию с аргументом 15, она возвращает «Число больше 10». Когда мы вызываем функцию с аргументом 5, она возвращает «Число меньше или равно 10».

Также можно использовать оператор throw , чтобы выбросить исключение и выйти из функции.

Выход из метода/функции

Author24 — интернет-сервис помощи студентам

Я всегда использовал первый вариант выхода из метода. Но мне настоятельно посоветовали использовать второй вариант, так как код должен быть линейным.
Как используют выход из метода в серьёзных проектах?

1 2 3 4 5 6 7 8 9 10 11 12
void foo() { if(val == nulptr){ return; } // остальной код if(bar() != *val){ return; } // ещё какой-то код }
1 2 3 4 5 6 7 8 9 10 11
void foo() { if(val != nulptr){ // остальной код if(bar() == *val){ // ещё какой-то код } } }

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Выход из функции, если эта работает в другой функции
Здравствуйте, у мне такая проблема. У меня есть одна функция, которая полностью контролирует всю.

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

Выход из метода типа Void
Как в методе типа void, принудительно выйти из метода? У меня метод для поиска элементов в бинарном.

Выход из рекурсивного метода не осуществляется по Return
Почему-то после return опять рекурсию повторяет, мб я неправильно её написал ? private string.

2223 / 1728 / 725
Регистрация: 27.07.2012
Сообщений: 5,141

Чем больше уровней вложенности, тем хуже разбираться в коде. Так что первый вариант, на мой взгляд, более читаемый. А ещё можно разбивать на большее число функций.

1 2 3 4 5 6 7 8 9 10 11 12 13 14
void foo() { if(val != nulptr) do_code(); } void do_code() { // остальной код if(bar() == *val){ // ещё какой-то код } }

Любитель чаепитий
3741 / 1798 / 565
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1

ЦитатаСообщение от kylroma Посмотреть сообщение

Но мне настоятельно посоветовали использовать второй вариант
кто посоветовал?
это бред.
используйте первый вариант.
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,112
Записей в блоге: 2

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

Добавлено через 2 минуты
Один return удобно использовать например в таких случаях

1 2 3 4 5 6 7 8 9 10 11 12 13 14
if (condition1) { return "asdf"; } if (condition2) { return "asdfasdf"; } if (condition3) { return "fdas"; }

Тут считает кошерным сделать так

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
std::string returnValue; if (condition1) { returnValue = "asdf"; } if (condition2) { returnValue = "asdfasdf"; } if (condition3) { returnValue = "fdas"; } return returnValue;

Но, опять же, если первый вариант легко читается, то почему бы и нет.
243 / 88 / 44
Регистрация: 30.12.2013
Сообщений: 316
Записей в блоге: 2

GbaLog-
Настаивал на втором варианте знакомый синьёр-помидор.
Всем спасибо. Буду использовать первый вариант.

671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2

ЦитатаСообщение от kylroma Посмотреть сообщение

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

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