Зачем использовать бесконечные циклы? - PullRequest
8 голосов
/ 22 октября 2008

Другой автор спросил о предпочтительном синтаксисе для бесконечных циклов .

Дополнительный вопрос: Почему вы используете в своем коде бесконечные циклы? Обычно я вижу такую ​​конструкцию:

for (;;) {
  int scoped_variable = getSomeValue();
  if (scoped_variable == some_value) {
    break;
  }
}

Что позволяет обойтись без возможности увидеть значение scoped_variable в предложении for или while. Какие еще варианты используются для «бесконечных» циклов?

Ответы [ 14 ]

1 голос
/ 22 октября 2008

Я использую их для написания демонов / сервисов Linux, которые зацикливаются до тех пор, пока не будут получены сигналы уничтожения / другого завершения.

1 голос
/ 22 октября 2008

Есть и другие вопросы, касающиеся того, если / когда можно использовать break в цикле. Давайте предположим, что мы согласны, что это иногда хорошо. В этих обстоятельствах (надеюсь, редко) я бы использовал бесконечный цикл, если есть ряд завершающих условий и нет идентифицируемых «первичных» завершающих условий.

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

В конечном счете, это вопрос вкуса.

0 голосов
/ 22 октября 2008

Кроме ситуаций со встроенными системами бесконечные циклы всегда действительно:

Repeat
   Something
Until Exit_Condition;

Но иногда Exit_Condition не является чем-то, что действительно может быть оценено в конце цикла. Вы всегда можете установить флаг, использовать этот флаг, чтобы пропустить остаток цикла, а затем протестировать его в конце, но это означает, что вы тестируете его как минимум дважды (код немного медленнее), и лично я нахожу его менее понятным. 1004 *

Бывают моменты, когда обмен ясности на скорость имеет смысл, но что-то, что не дает ни ясности, ни скорости, просто чтобы быть технически правильным? Похоже, плохая идея для меня. Любой компетентный программист знает, что, хотя (true) означает, что условие завершения находится где-то внутри цикла.

0 голосов
/ 22 октября 2008

Я использовал их при ожидании завершения нескольких потоков в c #, но теперь я использую класс ThreadPool.

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