Bu bir tür dolaylı cevap, ancak bu soru beni bunun arkasındaki mantığı düşündürdü ve bunun paylaşmaya değer olabileceğini düşündüm.
Herkesin söylediği gibi, do ... while
vücudu en az bir kez yürütmek istediğinizde bir döngü kullanırsınız. Ama hangi koşullarda bunu yapmak istersiniz?
Pekala, aklıma gelen en bariz durum sınıfı , kontrol koşulunun ilk ("primlenmemiş") değerinin, çıkmak istediğiniz zamanki ile aynı olması olabilir . Bu, koşulu çıkmayan bir değere hazırlamak için döngü gövdesini bir kez yürütmeniz ve ardından bu koşula göre gerçek tekrarı gerçekleştirmeniz gerektiği anlamına gelir. Programcılar bu kadar tembelken, birisi bunu bir kontrol yapısında toplamaya karar verdi.
Örneğin, bir zaman aşımına sahip bir seri bağlantı noktasından karakter okumak şu biçimi alabilir (Python'da):
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)
Kod tekrarını Not: char_read = port.read(1)
. Python'da bir do ... while
döngü olsaydı, şunu kullanmış olabilirdim:
do:
char_read = port.read(1)
response_buffer.append(char_read)
while char_read
Döngüler için yeni bir kapsam oluşturan diller için eklenen avantaj: char_read
işlev ad alanını kirletmez. Ancak bunu yapmanın daha iyi bir yolu olduğunu ve bunun da Python'un None
değerini kullanmak olduğunu unutmayın :
response_buffer = []
char_read = None
while char_read != '':
char_read = port.read(1)
response_buffer.append(char_read)
response = ''.join(response_buffer)
İşte benim açımdan en önemli nokta şudur : sıfırlanabilir türlere sahip dillerde, durum initial_value == exit_value
çok daha seyrek ortaya çıkar ve belki de bu yüzden onunla karşılaşmazsınız. Bunun asla olmadığını söylemiyorum, çünkü bir fonksiyonun geçerli bir koşulu belirtmek için döneceği zamanlar hala vardır . Ama aceleyle ve kısaca düşündüğüm görüşüme göre, kullandığınız diller şu anlama gelen bir değere izin vermediyse, bu çok daha fazla olur: bu değişken henüz başlatılmadı.None
Bu mükemmel bir akıl yürütme değildir: gerçekte, artık boş değerler yaygın olduğundan, bir değişkenin alabileceği geçerli değerler kümesinin bir unsurunu daha oluştururlar. Ancak pratik olarak, programcılar, duyarlı durumda olan bir değişkeni, döngü çıkış durumunu içerebilen ve başlatılmamış durumda olan bir değişkeni ayırt etmek için bir yola sahiptir.