Java: соглашение о бесконечном цикле

Каково соглашение для бесконечного цикла в Java? Должен ли я писать while(true) или for(;;)? Лично я бы использовал while(true), потому что реже использую циклы while.


person Justin    schedule 13.04.2013    source источник
comment
Я бы предпочел while(running), так что у меня есть выход.   -  person NilsH    schedule 13.04.2013


Ответы (5)


Нет никакой разницы в байт-коде между while(true) и for(;;), но я предпочитаю while(true), так как он менее запутан (особенно для новичков в Java).

Вы можете проверить это с помощью этого примера кода

void test1(){
    for (;;){
        System.out.println("hello");
    }
}
void test2(){
    while(true){
        System.out.println("world");
    }
}

При использовании команды javap -c ClassWithThoseMethods вы получите

  void test1();
    Code:
       0: getstatic     #15                 // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #21                 // String hello
       5: invokevirtual #23                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: goto          0

  void test2();
    Code:
       0: getstatic     #15                 // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #31                 // String world
       5: invokevirtual #23                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: goto          0

который показывает ту же структуру (за исключением строк «hello» и «world»).

person Pshemo    schedule 13.04.2013
comment
Я думаю, что пришло время для Java придумать конструкцию бесконечного цикла, поэтому нам не нужны обходные пути, как в других языках. Могу ли я предложить do {} без необходимости while или просто loop {}. - person Oliver Hausler; 04.11.2015
comment
@OliverHausler Я бы предпочел forever, например, в Scratch wiki.scratch.mit.edu/wiki/Forever_%28block%29< /а> - person Frank Schmitt; 28.04.2016

Я предпочитаю while(true), потому что циклы while использую реже, чем циклы for. Циклы for имеют лучшее применение, а while(true) намного чище и легче читается, чем for(;;)

person 06needhamt    schedule 13.04.2013
comment
Другим аргументом в пользу while(true) является удобство сопровождения: в будущем true может стать логическим условием. - person Aubin; 13.04.2013
comment
@Aubin OTOH, for(;;) приятнее играть в гольф - person John Dvorak; 13.04.2013
comment
@Aubin, как и средняя часть for! Просто вставьте его, как for(; condition(););. Использование for также означает, что вы можете легко добавить переменную для подсчета итераций цикла (или других вещей «между итерациями») после второй из двух точек с запятой. - person AJMansfield; 12.11.2013
comment
Нет ничего сложного в том, чтобы прочитать for..., это слово из трех букв. - person ChiefTwoPencils; 20.10.2014

Тебе решать. Я не думаю, что существует соглашение для таких вещей. Вы можете использовать while(true) или for(;;)

Я бы сказал, что чаще всего встречаю while(true) в исходниках. for(;;) используется реже и его труднее читать.

person TheEwook    schedule 13.04.2013
comment
Другим аргументом в пользу while(true) является удобство сопровождения: в будущем true может стать логическим условием. - person Aubin; 13.04.2013
comment
Нет ничего сложного в том, чтобы прочитать for..., это слово из трех букв. - person ChiefTwoPencils; 20.10.2014

for(;;) отстой, новичкам читать совершенно неинтуитивно. Пожалуйста, используйте while(true) вместо этого.

person Franz Kafka    schedule 13.04.2013

В конце концов, это ваш выбор. В руководствах по Java показаны как for, так и пока.

Однако while(true) используется чаще, так как он намного понятнее.

person blackpanther    schedule 13.04.2013