На мой взгляд, цикл for используется для итерации по известному или определяемому диапазону.
String[] names = //something;
for ( int i = 0; i < names.length; i++ ) { //do stuff }
что эквивалентно (определение i в стороне):
String[] names = //something;
int i = 0;
while (i < names.length )
{
// do stuff
i++;
}
Другими словами, for
цикл - это просто (очень полезный) синтаксический сахар для часто используемой while
конструкции.
Тем не менее, я вижу много for(;;)
конструкций в сети, которые функционально эквивалентныwhile(true)
Какова причина этого? Почему бесконечный цикл for предпочтительнее бесконечного цикла while?
// Я даже видел учебник по Java, который вообще не использовал циклы while! Ведущие к таким чудовищным конструкциям как:
String input = getInput();
for( ; !inputIsValid(input) ; )
{
//redo;
}
language-agnostic
coding-style
Крис Кадмор
источник
источник
while
иfor
здесь, и вопрос не изменится.while(true)
иfor(;;)
иметь в виду то же самое. У вас явно есть сильное предпочтениеwhile
, другие могут иметь такое же сильное предпочтениеfor
. Нельзя сказать, что одно правильнее другого.for(;;)
запутанного. Это стандартная идиома C, которую вы документируете в разделе 3.5 K & R (2e). Я понимаю, что тебе это не нравится; Вы должны понимать, что другие, очевидно, предпочитают это (иначе вы бы никогда этого не увидели). Это может быть более или менее приемлемо на языках, отличных от C; Вы пометили этот язык-независимость, которая только снижает вероятность окончательного ответа. Опять же, я проголосовал за закрытие, потому что Q не конструктивен; если бы я обиделся, я бы пометил как оскорбительное вместо или в дополнение к закрытию. Это все.wheeeeeeee { ... }
Ответы:
Это пережиток старой практики программирования на PDP-11 (да, я сказал, старая ). Он использовался для сохранения одной инструкции, что было полезно для ускорения циклов.
Для получения дополнительной информации см. Следующее: http://www.flounder.com/exceptions.htm
источник
for(;;)
синтаксис как (по их мнению) более прямое утверждение Намерение, что не было никаких критериев для выхода из цикла.while(1) { }
.некоторые компиляторы выдают предупреждение (что-то вроде условного выражения является константой ) при использовании,
while( 1 )
но сfor( ; ; )
этим нечего предупреждать. Программисты хотят код без предупреждений, поэтому они используют вариант for.источник
Это привычка, приобретенная в C-программировании, где нет логического типа. Хотя (1) потенциально может быть эквивалентом, но For (;;) часто используется, как показано в K & R, если я правильно помню. Я подозреваю, что там тоже была какая-то аппаратная причина.
источник
for (;;) может читаться как «навсегда», что некоторые считают более естественным, чем «в то время как истина».
источник
Все опытные программисты, которых я попросил, могут распознать
for(;;)
быстрее, чемwhile(true)
илиwhile(1)
.источник
for(;;)
14 мс быстрее, чемwhile(1)
:-)