Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2014, 13:59   #1
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию конструкция while(true)

Как-то раз использовал бесконечный цикл с условием выхода в теле . Через какое - то время подошел коллега и сказал, что поменял конструкцию на традиционную (с условием в while), что мол так программировать нельзя, признак дурного тона, что можно забыть (!) про выход из цикла и тд. У кого какое мнение на этот счет?
sashonk вне форума Ответить с цитированием
Старый 12.02.2014, 14:03   #2
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

while(true) - общепринятая конструкция. Ей оформлен основной цикл всех движков id Software.

http://fabiensanglard.net/quake3
http://fabiensanglard.net/doom3

Последний раз редактировалось ds.Dante; 12.02.2014 в 14:08.
ds.Dante вне форума Ответить с цитированием
Старый 12.02.2014, 14:11   #3
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,863
По умолчанию

Есть 4 типа циклов:
1. Со счетчиком (параметром) - повторяется заранее заданное число раз.
2. С предусловием - условие выхода стоит вначале цикла.
3. С постусловием - условие выхода в конце.
4. С инусловием - условие выхода в середине тела цикла.

Так вот четвертый тип не реализован во многих языках специальными языковыми конструкциями, однако легко моделируется с помощью while (true) и break.
Arigato вне форума Ответить с цитированием
Старый 12.02.2014, 14:13   #4
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Цитата:
Сообщение от sashonk Посмотреть сообщение
Как-то раз использовал бесконечный цикл с условием выхода в теле . Через какое - то время подошел коллега и сказал, что поменял конструкцию на традиционную (с условием в while), что мол так программировать нельзя, признак дурного тона, что можно забыть (!) про выход из цикла и тд. У кого какое мнение на этот счет?
Ну если программист забывает про выход из бесконечного цикла - ему стоит задуматься о том, стоит ли продолжать (я имею ввиду профессионального программиста, который зарабатывает этим, а не студента).

Когда вы пишете бесконечный цикл, то вы должны осознавать, что это за собой влечет. Ваш коллега прав только в случае если условие выхода только одно. А если условий несколько - уже в принципе бесполезно городить огромные условия в while.
MaTBeu вне форума Ответить с цитированием
Старый 12.02.2014, 15:44   #5
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

я всегда так пишу, т.к. короче.
Код:
for(;;)
{
}
the_deer_one вне форума Ответить с цитированием
Старый 12.02.2014, 16:25   #6
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,692
По умолчанию

Почему бы к goto не вернуться? Да и вы нарушаете идею структурного программирования (со всеми вытекающими), где исключены всякие continue, break ...
Цитата:
цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).

В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения операций не предусматривается.
Но согласитесь это удобно!
Kostia вне форума Ответить с цитированием
Старый 12.02.2014, 16:42   #7
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,863
По умолчанию

Kostia, некорректное высказывание: "цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла)."
Кроме того цикл может содержать как условие продолжение, так и условие выхода. В этом контексте break никак не нарушает никаких идей, потому как запись:
if <условие> then break;
или же
until <условие>;
По сути означают одно и тоже. Почему тогда первый способ что-то нарушает, а второй - нет?
Arigato вне форума Ответить с цитированием
Старый 12.02.2014, 16:55   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
4. С инусловием - условие выхода в середине тела цикла.

Так вот четвертый тип не реализован во многих языках специальными языковыми конструкциями, однако легко моделируется с помощью while (true) и break.
Интересно. А встречали ЯП где это реализовано?

Если правильно понимаю, конструкцияновых Delphi: for X in Y do
и C++ foreach как раз для этого придумали.

или вы говорите о том, когда размер Y не известен а выход по условию нужен?
Человек_Борща вне форума Ответить с цитированием
Старый 12.02.2014, 17:07   #9
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Цитата:
Сообщение от sashonk Посмотреть сообщение
Как-то раз использовал бесконечный цикл с условием выхода в теле . Через какое - то время подошел коллега и сказал, что поменял конструкцию на традиционную (с условием в while), что мол так программировать нельзя, признак дурного тона, что можно забыть (!) про выход из цикла и тд. У кого какое мнение на этот счет?
Коллега прав, тем более, что он смог реализовать нужное нормальным циклом с условием, а не бесконечным. Бывают ситуации, когда код будет изящнее и понятнее с бесконечным, тогда есть смысл писать "нетрадиционно", но таки стремиться нужно к циклам, реализованным в языке без всех этих хитростей с бряками.
pu4koff вне форума Ответить с цитированием
Старый 12.02.2014, 17:07   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Если правильно понимаю, конструкцияновых Delphi: for X in Y do
и C++ foreach как раз для этого придумали.
foreach это с предусловием.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Основные управляющие конструкции языка Delphi. Конструкция присваивания. Условная конструкция. Конструкция множественного выбора. nadyaH Помощь студентам 3 23.11.2013 22:19
конструкция if else Emperator12 Общие вопросы Delphi 7 26.09.2012 08:19
конструкция if else Emperator12 Общие вопросы Delphi 2 23.09.2012 11:36
Конструкция if GBAXA Общие вопросы Delphi 5 04.08.2010 15:12
Конструкция try..except anGeee Общие вопросы Delphi 2 21.05.2009 11:34