2015-04-15 2 views
6

Я использую while true loop во многих проектах. Это мне хорошо, и это не слишком сложно. Итак, почему это плохая идея использовать в то время как истинный цикл бесконечно работает фоновые процессы. Спасибо за ваши ответы.Почему пока (правда) это плохая практика?

+4

'while (true)' не является по своей сути плохой практикой. Некоторые использования 'while (true)' являются плохой практикой, в основном занятой, ожидающей, когда другие виды ожиданий будут более уместными, но нет ничего плохого в 'while (true)' самом. – user2357112

+2

Почему вы говорите, что это плохая идея? – user2357112

+0

Пока вы знаете, что делаете, и у вас есть чистый способ выйти из него, это не плохая практика. – Morb

ответ

4

Мой руководитель проекта не позволяет такого рода петли в моем коде, он утверждает, что он должен быть заменен while(!exit_flag)

Это очень спорно , while (!exit_flag) предполагает, что цикл имеет естественное условие выхода, которое оно достигнет в некоторой конкретной точке само по себе, например. что-то считая от 0 до 100, а затем покидая цикл. Однако, если вы пишете этот цикл, чтобы создать постоянный цикл демона или события, то точкой этого цикла является постоянная работа программы. Ничто не говорит неопределенно лучше, чем while (true).

Нет никакой реальной технической разницы между обоими; это просто вопрос читаемости и выражения намерений. Разумеется, вам придется сделать это с людьми, которые в конце будут читать этот код. Если их политика равна while (!exit_flag), пусть будет так.

4

Это не плохая практика, это просто означает, что вы не продумали свой код.

Условие обязано указывать цикл, когда закончить цикл. Если у вас есть конечная точка, то почему бы не назвать ее условием?

var i = 0; 
while(true){ 
    i++; 
    if(i == 100) 
     break; 
} 

Это прекрасный код. Но так это:

var i = 0; 
while(i != 100){ 
    i++; 
} 

Оба метода являются правильными, но если кто-то читает ваш код, гораздо легче увидеть, когда цикл остановится итерация, если это прямо в состоянии.

4

Хм, спросите того, кто утверждал, что это «плохая идея».

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

Если пока не установлены какие-либо критерии для завершения, необходимо будет создать какой-либо другой механизм, чтобы прервать цикл, скрытый где-то внутри цикла, например return, break или (yuck - Basic - но это, вероятно, statement originins - оператор «Goto», прыгающий где-то вне цикла), чтобы завершить цикл.

Код, подобный этому, может быть трудно читать и отлаживать, и ранее это был признак того, что программисту было не очень важно писать чистый код. Тем не менее в настоящее время с приложениями, управляемыми событиями и структурированной обработкой ошибок (см. Try ... catch structure) есть чистые и легко читаемые способы выхода из любого цикла в любое время, поэтому, хотя (true) можно использовать без проблем.

Greetz

Алине

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