While döngüsü neden sonsuz döngüye girer? Çünkü döngünün koşulu her tur sonunda hâlâ doğru kalır. Koşula bağlı bitişte, koşulu etkileyen değer her turda uygun yönde ilerlemeli ve sonunda koşulu yanlış yapmalıdır. Değer değişmiyor ya da yanlış yönde ilerliyorsa döngü durma noktasına ulaşamaz.
Teşhis için üç parçayı birlikte incele: koşul neyi test ediyor, durum değişkeni bu koşulu etkileyen hangi değeri tutuyor ve çıkış yolu nerede oluşuyor? Dillerin sözdizimi değişse de bu akış mantığı ortaktır.
While döngüsünün durması için ne değişmelidir?

Normal koşul ile bitecek bir while döngüsünde, her turda koşulda kullanılan en az bir değer güncellenmelidir. Örneğin koşul sayac <= 3 ise sayaç artırılmalı, koşul sayac > 0 ise sayaç azaltılmalıdır. Kullanıcı girdisi test ediliyorsa yeni girdi okunmalı, bir durum değişkeni test ediliyorsa gerektiğinde bu değişken değiştirilmelidir.
Çıkış yolu çoğu zaman koşulun yanlış olmasıdır. Bazı algoritmalarda belirli bir olay gerçekleştiğinde açıkça tasarlanmış bir ayrılma kuralı da kullanılabilir. Ancak break eklemek, koşulun ve güncellemenin neden çalışmadığını anlamanın yerine geçmez. Önce döngünün normal ilerleyişi açıklanabilmelidir.
Aşağıdaki kısa Python örneğinde sözdizimi dile özgüdür, fakat izlenen mantık geneldir:
sayac = 1
while sayac <= 3:
print(sayac)
sayac += 1
sayac her turda arttığı için koşul üçüncü turdan sonra yanlış olur. Beklenen çıktı, ayrı satırlarda 1, 2 ve 3 değerleridir.
“Sonsuz döngüyü bulmak için her turda koşulu değiştiren değerin gerçekten değişip değişmediğini kontrol et.”
Koşul, durum değişkeni ve çıkış yoluyla hata teşhisi
Bir döngüyü adım adım incelerken her hata için aynı üç soruyu sor: Koşul neyi test ediyor? Hangi değer değişmeli? Koşulu yanlış yapacak veya döngüden çıkaracak yol nerede? Bu yöntem, sorunu yalnızca while satırında aramak yerine her turdaki veri akışını görmeyi sağlar.
| Hata deseni | Koşul | Değişmesi gereken değer | Çıkış yolunun neden oluşmadığı | Düzeltme yönü |
|---|---|---|---|---|
| Sayaç güncellenmiyor veya yanlış yönde ilerliyor | sayac <= 5 |
sayac |
Sayaç artmaz ya da 5'ten uzaklaşırsa koşul doğru kalır. | Koşula uygun artırma veya azaltma işlemini her turda çalıştır. |
| Karşılaştırma yönü başlangıç değeri ve güncellemeyle uyumsuz | sayac >= 1 |
sayac ve ilerleme yönü |
Sayaç 1'den başlayıp artırılırsa alt sınır koşulu yanlışlaşmaz. | Başlangıç değerini, yönü ve sınırı aynı ilerleme planına göre düzenle. |
| Kullanıcı girdisi döngü içinde yenilenmiyor | cevap != "çık" |
cevap |
İlk girdi sabit kalır; çıkış değeri hiç okunmaz. | Her turda yeni girdiyi al veya başka bir çıkış kuralı tanımla. |
| Durum değişkeni sabit kalıyor | devam == true |
devam |
Durumu değiştirecek olay gerçekleşse bile değişken güncellenmez. | İlgili olayda durumu değiştirecek adımı ekle. |
Bu teşhis yöntemini farklı dillerde uygulamak, algoritmik düşünme pratiğini güçlendirir. Berk Akademi'nin Algoritmik Düşünme Testi, koşul, değişken ve adımlar arasındaki ilişkiyi dil bağımsız biçimde gözden geçirmek için kullanılabilir.
Karşılaştırma yönündeki hata her zaman sonsuz döngü üretmez; döngünün hiç başlamamasına da yol açabilir. Bu nedenle başlangıç değerini, her turdaki güncellemeyi ve koşulun hangi durumda yanlış olacağını ayrı ayrı yazmak yararlıdır.
1'den 5'e sayan hatalı ve düzeltilmiş while örneği

While döngüsünün nasıl durduğunu görmek için 1'den 5'e sayan basit bir örnek kullanabiliriz. Aşağıdaki kodlar Python sözdizimiyle yazılmıştır. Başka dillerde yazım değişebilir, ancak koşul, durum değişkeni ve güncelleme arasındaki ilişki aynıdır.
Özetle: While döngüsünün durması için koşulda kullanılan değerlerden en az biri, koşulu sonunda yanlış hâle getirecek şekilde değişmelidir.
Hatalı örnek: Sayaç değişmiyor
Bu örnekte döngü koşulu sayac <= 5 olduğu hâlde döngünün içinde yalnızca ekrana yazdırma yapılır. sayac değişmediği için koşul her turda doğru kalır.
sayac = 1
while sayac <= 5:
print(sayac)
Bu kodu doğrudan çalıştırırsan program durmaz. İlk turda 1 yazdırılır ve sayaç değişmediği için sonraki turlarda da aynı değer tekrarlanır:
1
1
1
...
Düzeltilmiş örnek: Sayaç her turda artırılıyor
Çözüm, yazdırma işleminden sonra sayacı artırmaktır:
sayac = 1
while sayac <= 5:
print(sayac)
sayac += 1
Beklenen çıktı:
1
2
3
4
5
Döngünün akışını elle izlediğinde her turda koşulun değerlendirildiğini, değerin yazdırıldığını ve ardından sayacın artırıldığını görürsün:
| Tur | Tur başındaki sayac | Koşul sonucu | Yazdırılan değer | Tur sonundaki sayac |
|---|---|---|---|---|
| 1 | 1 | doğru | 1 | 2 |
| 2 | 2 | doğru | 2 | 3 |
| 3 | 3 | doğru | 3 | 4 |
| 4 | 4 | doğru | 4 | 5 |
| 5 | 5 | doğru | 5 | 6 |
Beşinci turun sonunda sayac değeri 6 olur. Bir sonraki kontrolde 6 <= 5 yanlış olduğu için döngü sona erer.
break ve continue kullanırken döngüyü nasıl güvenli tutarsın?
break, döngüden çıkmak için açık ve anlamlı bir ek kural olduğunda kullanılmalıdır. Örneğin aranan değer bulunduğunda veya kullanıcı özel bir çıkış komutu verdiğinde döngüyü sonlandırabilir. Ancak temel koşul ya da sayaç güncellemesi hatalıysa rastgele break eklemek sorunu çözmek yerine gizler. Önce döngünün doğal durma koşulunu düzelt, break kullanımını tasarlanmış çıkış yollarıyla sınırla.
continue çalıştığında o turun gövdesinin kalan kısmı atlanır ve bir sonraki koşul kontrolüne geçilir. Güncelleme satırı continue ifadesinden sonra bulunuyorsa belirli bir durumda güncelleme hiç çalışmayabilir.
sayac = 0
while sayac < 5:
if sayac == 2:
continue
print(sayac)
sayac += 1
Bu örnekte sayaç 2 değerine ulaştığında continue çalışır. Alttaki sayac += 1 satırı atlandığı için sayaç 2'de kalır ve döngü aynı durumu tekrar tekrar işler.
Güncellemeyi continue çalışmadan önce yaparak bu akışı güvenli hâle getirebilirsin:
sayac = 0
while sayac < 5:
if sayac == 2:
sayac += 1
continue
print(sayac)
sayac += 1
Bu sürümde 2 değeri bilinçli olarak yazdırılmaz, ancak sayaç ilerlemeye devam eder. Döngüde hata ararken şu kontrol listesini kullanabilirsin:
whilekoşulunu yaz ve döngünün hangi durumda duracağını açıkça belirt.- Koşulda kullanılan değerleri belirle ve her birinin nerede değiştiğini işaretle.
- İlk birkaç turu elle izle; tur başı ve tur sonu değerlerini tabloya yaz.
- Güncelleme satırının
continue,ifvebreakgibi tüm akış yollarında çalıştığını kontrol et. - Koşulun yanlış hâle geldiğini veya tasarlanmış çıkışa ulaşıldığını doğrula.
- Teşhis sırasında geçici bir tur sayacı ya da günlük kaydı kullan.
Döngüler, hata ayıklama ve algoritmik düşünme üzerine ek örnekler için programlama ve algoritma yazılarına göz atabilirsin.
Sık Sorulan Sorular
while True her zaman sonsuz döngü müdür?
Hayır. while True koşulu kendiliğinden yanlış hâle gelmez, ancak döngü içinde break, bir işlevden return veya başka bir tasarlanmış çıkış yolu varsa döngü sonlanabilir. Bu çıkış yolu yoksa döngü devam eder.
break sonsuz döngü sorununu çözmek için ne zaman kullanılmalıdır?
break, hedef bulunduğunda veya belirli bir çıkış komutu alındığında olduğu gibi, algoritmada açıkça tanımlanmış bir ek çıkış gerektiğinde kullanılmalıdır. Eksik sayaç güncellemesini ya da yanlış koşulu gizlemek için kullanılmamalıdır.
continue neden sayaç güncellemesini atlayabilir?
Çünkü continue çalıştığı anda döngü gövdesinin kalan satırları atlanır. Sayaç güncellemesi bu satırlardan sonra yer alıyorsa çalışmaz ve döngü aynı sayaç değeriyle yeniden başlayabilir.
Kullanıcı girdisiyle çalışan while döngüsünde çıkış koşulu nasıl tasarlanır?
Önce normal verilerden ayırt edilebilen bir çıkış komutu veya değeri belirle. Her turda girdiyi al, çıkış değerini kontrol et, ardından normal işlemi yap. Geçersiz girdiler için de döngünün yeniden giriş alacağı veya durumunu ilerleteceği akışı açıkça tasarla.
Koşulu, güncellemeyi ve bütün çıkış yollarını birlikte izlemek, while döngülerini daha güvenli kurmana yardımcı olur.