Ini semacam jawaban tidak langsung, tetapi pertanyaan ini membuat saya memikirkan logika di baliknya, dan saya pikir ini mungkin layak untuk dibagikan.
Seperti yang dikatakan orang lain, Anda menggunakan do ... while
loop ketika Anda ingin mengeksekusi body setidaknya sekali. Tetapi dalam keadaan apa Anda ingin melakukan itu?
Nah, kelas situasi yang paling jelas yang dapat saya pikirkan adalah ketika nilai awal ("tidak dipersiapkan") dari kondisi pemeriksaan sama dengan saat Anda ingin keluar . Ini berarti Anda perlu mengeksekusi badan pengulangan satu kali untuk membuat kondisi prima ke nilai yang tidak keluar, lalu melakukan pengulangan sebenarnya berdasarkan kondisi tersebut. Apa dengan programmer yang begitu malas, seseorang memutuskan untuk membungkusnya dalam struktur kontrol.
Jadi misalnya, membaca karakter dari port serial dengan batas waktu mungkin menggunakan format (dengan Python):
response_buffer = []
char_read = port.read(1)
while char_read:
response_buffer.append(char_read)
char_read = port.read(1)
# When there's nothing to read after 1s, there is no more data
response = ''.join(response_buffer)
Perhatikan duplikasi kode: char_read = port.read(1)
. Jika Python memiliki do ... while
loop, saya mungkin telah menggunakan:
do:
char_read = port.read(1)
response_buffer.append(char_read)
while char_read
Manfaat tambahan untuk bahasa yang membuat lingkup baru untuk loop: char_read
tidak mencemari namespace fungsi. Tetapi perhatikan juga bahwa ada cara yang lebih baik untuk melakukan ini, dan itu adalah dengan menggunakan None
nilai Python :
response_buffer = []
char_read = None
while char_read != '':
char_read = port.read(1)
response_buffer.append(char_read)
response = ''.join(response_buffer)
Jadi, inilah inti dari poin saya: dalam bahasa dengan jenis nullable, situasi initial_value == exit_value
muncul jauh lebih sering, dan yang mungkin mengapa Anda tidak mengalami hal itu. Saya tidak mengatakan itu tidak pernah terjadi, karena masih ada waktu dimana suatu fungsi akan kembaliNone
untuk menandakan kondisi yang valid. Tetapi menurut pendapat saya yang terburu-buru dan dipertimbangkan secara singkat, ini akan terjadi lebih banyak jika bahasa yang Anda gunakan tidak memungkinkan untuk nilai yang menandakan: variabel ini belum diinisialisasi.
Ini bukan alasan yang sempurna: pada kenyataannya, sekarang nilai null sudah umum, mereka hanya membentuk satu elemen lagi dari kumpulan nilai valid yang dapat diambil variabel. Tetapi secara praktis, programmer memiliki cara untuk membedakan antara variabel yang berada dalam status sensible, yang mungkin termasuk status keluar loop, dan berada dalam status tidak diinisialisasi.