В моей организации мы следуем правилам кодирования MISRA. В этом руководстве по кодированию указывается, что у нас не должно быть множественных возвратов в функции. У вас есть идея по этому поводу? Почему это так?
Я не согласен с тем, что функции никогда не должны иметь больше одного возврата. Бывают случаи, когда ранний возврат может облегчить чтение и обслуживание кода.
function DoStuff
{
if ( simpleCondition ) return result;
DoComplcicatedProcess
return complicatedOperatotionResult;
}
Да, возможно, это условно, но в этом случае легко читать и потенциально более эффективно.
Сначала один возврат несколько прост в обслуживании и понимании. Второе, имеющее несколько возвратов, скорее всего, означает, что мы возвращаем значение напрямую, а не количество. Это делает функцию намного легче понять. Позвольте мне привести простой пример.
Пример множественного возврата
CalculateInterest(int cost)
{
if (cost < 100)
return cost * .2;
else
return cost * .3;
}
Такая же функция с одним возвратом
CalculateInterest(int cost)
{
float interest;
if (cost < 100)
interest = cost * .2;
else
interest = cost * .3;
return interest;
}
return cost * (cost < 100 ? 0.2 : 0.3);
,
Функция с несколькими операторами возврата является сбивающей с толку, и ее нелегко понять, если метод слишком велик. Вы можете случайно пропустить несколько строк, которые должны быть выполнены.
Если вы пишете небольшую программу, которая не нуждается в каком-либо будущем обслуживании, может быть, игнорировать это правило. Однако для более длинных программ, которые могут быть сохранены в будущем, когда люди исправляют ошибку через какое-то время, вполне возможно упустить часть кода, возвращаемого обратно к вызывающей функции, и поместить код ниже этого блока, предполагая, что он будет запущен. Одним из таких примеров может быть очистка кода.
Можно легко утверждать, что программист должен быть более осторожным, но после одной политики возврата будет легче избежать таких ошибок.