Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

While Döngüsü Neden Sonsuz Döngüye Girer?

while-dongusu-neden-sonsuz-donguye-girer
Bu yazıda neler var?
  1. While döngüsünün durması için ne değişmelidir?
  2. Koşul, durum değişkeni ve çıkış yoluyla hata teşhisi
  3. 1'den 5'e sayan hatalı ve düzeltilmiş while örneği
  4. break ve continue kullanırken döngüyü nasıl güvenli tutarsın?
  5. Sık Sorulan Sorular

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?

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

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:

  1. while koşulunu yaz ve döngünün hangi durumda duracağını açıkça belirt.
  2. Koşulda kullanılan değerleri belirle ve her birinin nerede değiştiğini işaretle.
  3. İlk birkaç turu elle izle; tur başı ve tur sonu değerlerini tabloya yaz.
  4. Güncelleme satırının continue, if ve break gibi tüm akış yollarında çalıştığını kontrol et.
  5. Koşulun yanlış hâle geldiğini veya tasarlanmış çıkışa ulaşıldığını doğrula.
  6. 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.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara