2013-11-19 2 views
3

Во время проверки коды сегодня, я наткнулся на цикл, который выглядит следующим образом:Multiple условие для цикла

for(int i=0; i<some_value && !found ; ++i) 
{ 
    if(some logic) 
    { 
    do_stuff(); 
    found=true; 
    } 
} 

Я обычно код вещь такого рода, как это:

for(int i=0; i<some_value; ++i) 
{ 
    if(some logic) 
    { 
    do_stuff();  
    break; 
    } 
} 

У меня есть был программированием в течение многих лет и никогда до сих пор не видел более одного условия в цикле for. Я понимаю, что это абсолютно правильный код, так как && просто получает оценку и результат возвращается, я просто никогда не думал об использовании нескольких условий внутри для оператора вместо тела.

Я не видел этого до сегодняшнего дня и поэтому должен считать, что это не очень распространено.

Есть ли подводные камни, которые следует учитывать при использовании нескольких условий для проверки цикла?

+3

* «Если этот вопрос не подходит для StackOverflow, пожалуйста, помогите мне настроить его так, как он есть, или переместить его на соответствующий форум». * Я думаю, что SO не является * форумом *, но [Code Review] (http://codereview.stackexchange.com/) может быть более подходящим для этого вопроса, см. [Обзор кода: о каких темах я могу задать здесь?] (http://codereview.stackexchange.com/help/on-topic). – dyp

+0

@ DyP Возможно ... Я не знаю. Я пытаюсь спросить о языках C/C++, а не только стиле. Спасибо за ваши мысли. – kmort

+2

В простом цикле, как явственно, явный разрыв, очевидно, легче следовать (на мой взгляд, другие могут ошибаться). Если есть вложенные петли, это менее ясно: вы не можете вырваться из внешнего из внутреннего, поэтому ваши параметры являются флагом, 'goto' или рефакторингом внутреннего цикла в отдельную функцию. –

ответ

2

Есть «экстремистов» что увидеть break и continue как другое слово для "accursed"goto. Многие программисты Pascal/Delphi входят в эту фракцию.

Это зависит от вашего правила кодирования, если вы должны использовать такие флаги. Думаю, если вы укажете это в неакадемическом контексте, люди не будут серьезно относиться к вам. Помните!

Конечно, вам нужны такие флаги, если вы хотите выйти из внешнего цикла, если ваш язык не знает меченых циклов. Например, JavaScript и Java (и я думаю, что PHP тоже) поддерживают маркированные циклы.

Я не думаю, что есть какие-то подводные камни. Если ваш компилятор не слишком тупой, он будет определять использование, если такие флаги, и переписать код для использования правильных скачков.

Существует (по крайней мере) одно преимущество использования таких флагов: будет легче доказать правильность кода, например. используя Hoare calculus.

1

Привет, чтобы ответить на ваш вопрос, я старший научный сотрудник в области компьютерных наук. Я лично предпочитаю иметь несколько ограничений внутри цикла for. Я чувствую, что это помогает при отладке и сохранении ошибок. Это больше зависит от ресурсов? Я не совсем уверен.

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