Menurut cara berpikir saya, for for loop digunakan untuk beralih pada rentang yang diketahui atau ditentukan.
String[] names = //something;
for ( int i = 0; i < names.length; i++ ) { //do stuff }
yang setara (pelingkupan i samping) untuk:
String[] names = //something;
int i = 0;
while (i < names.length )
{
// do stuff
i++;
}
Dengan kata lain, for
loop hanyalah gula sintaksis (sangat berguna) untuk while
konstruksi yang umum digunakan .
Namun, saya melihat banyak for(;;)
konstruksi di web yang secara fungsional setara denganwhile(true)
Apa alasannya? Mengapa infinite for loop lebih disukai daripada loop infinite while?
// Aku bahkan melihat buku teks java yang tidak digunakan saat loop sama sekali! Menuju ke konstruksi mengerikan seperti:
String input = getInput();
for( ; !inputIsValid(input) ; )
{
//redo;
}
language-agnostic
coding-style
Chris Cudmore
sumber
sumber
while
dan difor
sini dan pertanyaannya tidak akan berubah.while(true)
danfor(;;)
berarti hal yang sama. Anda jelas memiliki preferensi yang kuat untukwhile
, orang lain mungkin memiliki preferensi yang sama kuatnya untukfor
. Tidak mungkin mengatakan bahwa yang satu lebih benar daripada yang lain.for(;;)
membingungkan sama sekali. Ini adalah idiom C standar, yang akan Anda dokumentasikan di bagian 3.5 dari K&R (2e). Saya mengerti bahwa Anda tidak menyukainya; Anda harus memahami bahwa orang lain jelas menyukainya (jika tidak, Anda tidak akan pernah melihatnya). Mungkin lebih atau kurang dapat diterima dalam bahasa selain C; Anda telah menandai agnostik bahasa ini yang hanya mengurangi kemungkinan jawaban definitif. Sekali lagi, saya memilih untuk menutup karena Q tidak konstruktif; jika saya tersinggung saya akan ditandai sebagai ofensif alih-alih atau sebagai tambahan untuk menutup. Itu semuanya.wheeeeeeee { ... }
Jawaban:
Ini adalah peninggalan dari praktik pemrograman lama pada PDP-11 (ya, kataku lama ). Ini digunakan untuk menyimpan satu instruksi, yang berguna untuk membuat loop berjalan lebih cepat.
Lihat yang berikut untuk informasi tambahan: http://www.flounder.com/exceptions.htm
sumber
for(;;)
sintaksis sebagai (menurut mereka) pernyataan yang lebih langsung dari maksud bahwa tidak ada kriteria yang dinyatakan untuk keluar dari loop.while(1) { }
.beberapa kompiler akan memberikan peringatan (sesuatu seperti ekspresi kondisional konstan ) ketika menggunakan
while( 1 )
tetapi denganfor( ; ; )
tidak ada yang perlu diperingatkan. Programmer menginginkan kode tanpa peringatan, jadi mereka menggunakan varian for.sumber
Ini adalah kebiasaan yang diperoleh dari pemrograman C di mana tidak ada tipe boolean. Sementara (1) akan berpotensi setara tetapi Untuk (;;) sering digunakan seperti yang muncul di K&R jika saya ingat dengan benar. Saya menduga ada alasan perangkat keras di sana juga.
sumber
untuk (;;) dapat dibaca sebagai "selamanya" yang beberapa orang temukan lebih alami daripada "sementara benar".
sumber
Semua programmer berpengalaman yang saya minta dapat mengenali
for(;;)
lebih cepat daripadawhile(true)
atauwhile(1)
.sumber
for(;;)
ms lebih cepat dariwhile(1)
:-)