2010-07-05 5 views
2

Очевидно, что с возвращением только в том случае, когда метод может сразу выйтиВетвление: лучше перерыв или возврат внутри цикла for/while?

for (...) { 
    return; 
} 

или

for() { 
    break; 
} 

Что лучше?

+1

* родственный *: http://stackoverflow.com/questions/36707/should-a-function-have-only-one-return-statement –

+1

перерыв и возврат имеют другое поведение, поэтому на самом деле нет ответа спросить, что является «лучше», – fearofawhackplanet

ответ

3

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

for (Foo foo: foos) { 

    // ... 

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

Versus:

Foo result = null; 

for (Foo foo: foos) { 

    // ... 

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

return result; 

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

0

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

0

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

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

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

Смежные вопросы