Есть ли существенная разница в оптимизации между этими двумя кодами (в Java и/или C++, в настоящее время, даже если я предполагаю, что это то же самое на всех языках)? Или это просто вопрос читаемости кода?Использовать несколько операторов возврата
int foo(...) {
if (cond) {
if (otherCondA)
return 1;
if (otherCondB)
return 2;
return 3;
}
int temp = /* context and/or param-dependent */;
if (otherCondA)
return 4 * temp;
if (otherCondB)
return 4/temp;
return 4 % temp;
}
и
int foo(...) {
int value = 0;
if (cond) {
if (otherCondA)
value = 1;
else if (otherCondB)
value = 2;
else value = 3;
}
else {
int temp = /* context and/or param-dependent */;
if (otherCondA)
value = 4 * temp;
else if (otherCondB)
value = 4/temp;
else
value = 4 % temp;
}
return value;
}
Первый один короче, избежать многочисленных imbrications из еще заявления и сэкономить одну переменную (или, по крайней мере, кажется, сделать это), но я не уверен, что это на самом деле что-то ...
Вы не уверены, что это хорошая идея ... почему? У вас есть какие-либо разумные причины или вы просто просыпались этим утром, чувствуя это? Вы пытались проверить сгенерированный код или использовать инструменты профилирования? –
Многие люди выступают за один «возврат», потому что считают, что код легче прояснить. Даже когда я следую этому совету, я также разрешаю ранние возвращения в начале функции, когда предварительные условия терпят неудачу. –
После нескольких тестов компилятор может оптимизировать только несколько операторов возврата, о которых говорит MarkRansom. В середине функции оптимизация очень плохая. –