Ответ ветвления: лучше перерыв или возврат внутри цикла for / while? - PullRequest
2 голосов
/ 05 июля 2010

Очевидно, с возвратом только в том случае, если метод может немедленно выйти

for (...) {
   return;
}

или

for () {
   break;
}

Что лучше?

Ответы [ 3 ]

3 голосов
/ 05 июля 2010

Два приведенных вами примера не совсем эквивалентны, поэтому сложно сказать, какой стиль лучше.Вот два подхода, которые немного больше похожи в том, что они делают:

for (Foo foo: foos) {

    // ...

    if (ok) { return foo; }
}
return null;

В сравнении:

Foo result = null;

for (Foo foo: foos) {

    // ...

    if (ok) {
        result = foo;
        break;
    }
} 

return result;

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

0 голосов
/ 05 июля 2010

Очевидно, что с return только в том случае, если метод может немедленно завершиться

Вы ответили на свой вопрос.Эти два имеют различную семантику и на самом деле не являются взаимозаменяемыми, и вариант return применим только к более конкретным сценариям ...

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

0 голосов
/ 05 июля 2010

Я бы лучше предложил подход к перерыву. Похоже, больше кода, но легче понять. Кроме того, внести изменения позже легче. Вы можете пойти на маркированные петли для ясности.

...