2013-09-26 7 views
-3

Рассмотрите один код:Возврат в цикл while и перерыв

Два оператора возврата, один в цикле while и другой из цикла while. Нет перерыва

while (node != null) { 
    if (node.item == 5) { 
     return node; 
    } 
    node = node.next; 
} 
return node; 

Единый возврат с перерывом в цикл.

while (node != null) { 
    if (node.item == 5) { 
     break; 
    } 
    node = node.next; 
} 
return node; 

Есть ли веские аргументы, чтобы следовать конкретному методу над другим?

+0

http://programmers.stackexchange.com/questions/142144/whiletrue-and-loop-breaking-anti-pattern – asawyer

+1

Неправильный/неправильный ответ - это будут только мнения. При этом мой первый быстрый взгляд на вашу версию «return» заставлял меня думать », но теперь, когда второе возвращение за пределы цикла бессмысленно/избыточно» ... затем я моргнул и снова посмотрел. Поэтому я лично пошел с версией 'break' –

+1

. На самом деле этот вопрос не работает в Stack Overflow, так как он не имеет одного ответа и поощряет обсуждение (т. Е. Шум). Оба подхода имеют свои достоинства. –

ответ

1

Первый будет работать, только если единственная цель метода - найти соответствующий узел. Если вы хотите что-то сделать с этим узлом вне цикла while, но в том же методе, вам нужно будет использовать второй подход.

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

В конце концов я бы return null, чтобы читатель понял, что это действительно то, что вы бы возвращали, если вы когда-нибудь доберетесь до конца метода.

+0

Очень хорошая точка о 'return null'. – erickson

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