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 показват както за, така и while.

Въпреки това, while(true) се използва по-често, тъй като е много по-разбираем.

person blackpanther    schedule 13.04.2013