Задать вопрос

Сколько return может быть в методе?

Здравствуйте!
Товарищ заявил что в одном методе должен быть 1 return
тоесть

function ($a) {
$return = null;
if ($a!=1) {
//a lot of code here
$return = 'a!=1';
}
else {
$return =  'a=1';
}
return $return;
}


а я ему же предлагаю
function($a) {
if($a==1) return 'a=1';
//a lot of code here
return 'a!=1';
}


Он пишет типо ему препод на с 1 курса в голову вбивал что если больше 1 return то
портится структурное программирование

Разрулите ситуацию
  • Вопрос задан
  • 2141 просмотр
Подписаться 1 Оценить 2 комментария
Решения вопроса 1
Stalker_RED
@Stalker_RED
Вопрос стиля.
Строго говоря, увеличение кол-во точек выхода увеличивает цикломатическую сложность, но читабельность важнее, имхо. Если в начале метода сразу прописаны условия при которых он возвращает какие-то фиксированные значения, бросает исключение и т.п., то это хорошо.

UPD: В структурном программировании есть концепция "single entry and a single exit", которая кабы говорит нам, что "return early" - это плохо. Начинать читать можно отсюда https://en.wikipedia.org/wiki/Return_statement#Mul...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 8
miraage
@miraage
Старый прогер
Я бы посмеялся, если бы услышал такое. :)
Сколько надо для читабельности/бизнес-логики, столько и пишите.
Ответ написан
Комментировать
Ну один ретурн как минимум заставит делать лишние переменные для хранения данных перед возвратом.
Так что лучше несколько, по крайней мере как по мне.
Ответ написан
Комментировать
@heahoh
Full stackoverflow developer
Если нет необходимости в дальнейшем выполнении скрипта, то почему бы и не использовать несколько return. Предложенный Вашим знакомым вариант более приемлем, так как нет хардкода - поддержка такого кода, изменения займут меньше времени
Ответ написан
Комментировать
mmmaaak
@mmmaaak
по мне так без разницы. Зато с несколькими return-ами удобно обрывать дальнейшее выполнение метода при ошибках в аргументах:
function (err, data) {
        if(err) return; //-->
        ....
    }
Ответ написан
Комментировать
Тут дело вкуса. Я за компактность, так что второй вариант на мой взгляд лучше
Ответ написан
Комментировать
@memba
Да есть целые секты программистов...
- Функция должна иметь только один выход...
- Функция не должна быть больше N строк

Это дело стиля и определяется командой программистов.
Ответ написан
Комментировать
@mib
Иногда хорошо в начале функции сделать всё возможное, чтоб выполнить ретурн:
Проверить, а вдруг ошибочные данные на входе, а вдруг вобще ничего не надо делать и так далее.
И только если выполнение пробралось сквозь все ловушки - начниать логику функции.

Тоже самое касается и циклов - как можно раньше выявить все возможные break, continue, return, а само тело цикла выполнять "в крайнем случае"

Тогда код становится на много проще, меньше вложенных условий, else, else if.
Ответ написан
Комментировать
@rsi
software engineer
Почитайте книгу совершенный код, там автор несколько глав разбирал преимущества различных подходов. А так я вам скажу, что вариант вашего друга изврат, читать сложнее, ресурсов жреть больше, ошибки отлавливать сложнее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы