2013-04-13 67 views
30

Quy ước cho một vòng lặp vô hạn trong Java là gì? Tôi có nên viết while(true) hoặc for(;;) không? Cá nhân tôi sẽ sử dụng while(true) vì tôi sử dụng trong khi vòng lặp ít thường xuyên hơn.Java: Công ước vòng lặp vô hạn

+6

Tôi muốn thực hiện 'while (running)', vì vậy tôi có cách thoát khỏi nó. – NilsH

+2

'break' có thể thoát ra. – Justin

+5

cho (;;) không đẹp. trong khi (chạy) là một _LOT_ dễ đọc hơn – radai

Trả lời

66

Không có sự khác biệt về mã byte giữa while(true)for(;;) nhưng tôi thích while(true) vì nó ít gây nhầm lẫn (đặc biệt đối với người mới sử dụng Java).

Bạn có thể kiểm tra xem nó với mã này dụ

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

Khi bạn sử dụng lệnh javap -c ClassWithThoseMethods bạn sẽ nhận được

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 

trong đó cho thấy cùng một cấu trúc (trừ "hello" vs chuỗi "thế giới").

+9

1: để giải thích – Aubin

+1

+1 để phân biệt giữa "dễ" để đọc và * hiểu *. Một cái gì đó mọi câu trả lời khác đều thất bại. – ChiefTwoPencils

+1

Tôi nghĩ rằng đã đến lúc Java bắt đầu xây dựng vòng lặp vô hạn nên chúng tôi không cần giải pháp thay thế, như các ngôn ngữ khác. Tôi có thể đề nghị 'do {}' không có 'while' là bắt buộc hay đơn giản là' loop {} '. –

12

Tôi thích while(true), bởi vì tôi sử dụng trong khi vòng lặp ít thường xuyên hơn cho vòng lặp. Đối với các vòng lặp có sử dụng tốt hơn và while(true) sạch hơn và dễ đọc hơn for(;;)

+1

Một lập luận khác ủng hộ khi (đúng) là khả năng bảo trì: true có thể trở thành một điều kiện logic trong tương lai – Aubin

+5

@Aubin OTOH, 'for (;;)' dễ chịu hơn khi chơi golf –

+3

@Aubin, vì vậy phần giữa của ' for'! Chỉ cần gắn nó vào như 'for (; condition(););'. Sử dụng 'for' cũng có nghĩa là bạn có thể dễ dàng thêm một biến để tính số lần lặp của vòng lặp (hoặc khác 'giữa các lần lặp lại') sau thứ hai của hai dấu chấm phẩy. – AJMansfield

6

Tùy thuộc vào bạn. Tôi không nghĩ rằng có một quy ước cho một điều như vậy. Bạn có thể sử dụng while(true) hoặc for(;;)

Tôi có thể nói rằng tôi gặp phải thường xuyên hơn while(true) trong mã nguồn. for(;;) ít được sử dụng và khó đọc hơn.

+1

Một lập luận khác ủng hộ khi (đúng) là duy trì: đúng có thể trở thành một điều kiện logic trong tương lai – Aubin

+0

Không có gì "khó đọc" về 'cho ...' một từ ba chữ cái của nó. – ChiefTwoPencils

3

Cuối cùng, đó là sự lựa chọn của bạn. Tham chiếu Java sau đây sử dụng định dạng for (;;): The for Statement.

Tuy nhiên, while(true) được sử dụng thường xuyên hơn trong các vòng lặp vô hạn trong trải nghiệm của tôi.

+0

+1 để tham chiếu – Aubin

+0

Và [Câu lệnh báo cáo trong khi và trong khi] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html) thực hiện với 'while (true)' – Justin

0

for(;;) hút, hoàn toàn không trực quan để đọc cho các tân binh. Vui lòng sử dụng while(true) để thay thế.

Các vấn đề liên quan