Menu

JavaScript While Döngüsü: while, do...while, break, continue

JavaScript'te while ve do...while döngüleri nasıl çalışır? Ne zaman for yerine while kullanmalı ve sonsuz döngüye düşmeden nasıl yazmalı?

Kaç Kez Döneceğinizi Bilmediğinizde

for döngüsü, sayıyı önceden bildiğinizde iş görür — "bunu 10 kez yap", "şu dizinin tüm indekslerini gez" gibi. while döngüsü ise diğer durum için vardır: bir şey değişene kadar devam et. Kaç tur süreceğini bilmezsiniz; yalnızca sizi durduracak koşulu bilirsiniz.

Yapısı son derece sade:

index.js
Output
Click Run to see the output here.

JavaScript parantez içindeki koşulu değerlendirir. Koşul doğruysa (truthy) blok çalışır. Sonra koşul tekrar kontrol edilir, sonra tekrar, ta ki yanlış (falsy) olana kadar. count++ satırını yazmayı unutursan koşul hiç değişmez — işte sana JavaScript sonsuz döngü.

Mantığı Kafana Oturtalım: Kontrol Et, Çalıştır, Tekrarla

Bir while döngüsünün anlamlı olması için üç şeyin olması şart:

  1. Koşulun bağlı olduğu bir değişken.
  2. Döngü gövdesinin bu değişkeni değiştirmesinin bir yolu.
  3. Er ya da geç koşulun false olması.

Bunlardan birini atlarsan başın belada demektir. En sık yapılan hata 2. adımı unutmaktır:

let count = 0;

while (count < 5) {
    console.log(count);
    // count artırılmayı unuttu — sonsuz döngüye girer
}

Süreç kapatılana kadar çalışmaya devam eder. Bir sunucuda başına gelirse gerçekten canını yakar. Her zaman kendine şunu sor: döngü gövdesinde koşulu false yapacak olan şey ne?

Gerçek Bir Kullanım: Bitiş Noktası Belli Değilse

İşte while döngüsünün for döngüsüne fark attığı yer tam olarak burası. Bir yerden eleman tüketiyorsun ve hepsini bitirmeden kaç tane olduğunu bilmiyorsun:

index.js
Output
Click Run to see the output here.

shift() dizinin ilk elemanını silip geri döndürür. Döngü, kuyrukta eleman olduğu sürece çalışır ve kuyruk boşaldığında kendiliğinden biter. Bunu for döngüsüyle de yazabilirsin ama problemin doğasına ters düşersin — burada while niyeti doğrudan ifade ediyor.

do...while: Önce Çalıştır, Sorguyu Sonra Yap

do...while sırayı tersine çevirir: önce gövdeyi çalıştırır, ondan sonra koşulu kontrol eder. Böylece döngünün en az bir kez çalışacağı garanti altına alınır:

index.js
Output
Click Run to see the output here.

Gövde her durumda en az bir kez çalışır; koşul en baştan false olsa bile. Normal while ile karşılaştır: orada koşul false ise döngü hiç dönmez.

Günlük hayattaki klasik senaryo: kullanıcıya bir soru sorup cevabı doğrulamak, cevap hatalıysa tekrar sormak. En az bir kez sormak zorunda olduğun için do...while tam burada oturuyor.

Kapanış ) işaretinden sonra noktalı virgül koymayı unutma — while ve for'dan farklı olarak do...while bunu şart koşuyor.

break: Döngüden Erken Çıkış

break, içinde bulunduğu en yakın döngüden anında çıkar. Doğal koşul tek başına yeterli olmadığında döngüyü durdurmanın en pratik yolu budur:

index.js
Output
Click Run to see the output here.

break çalıştığı an döngüdeki hiçbir şey artık yürütülmez — ne gövdenin geri kalanı, ne de bir sonraki koşul kontrolü. Çıktın gitti.

while (true) ve break kullanımı

Bazen durma koşulunu başlıkta değil de gövdenin içinde ifade etmek daha kolaydır. Böyle durumlarda yapıyı tersine çevir: sonsuza kadar dönen bir döngü kur ve işin bittiğinde break ile dışarı çık.

index.js
Output
Click Run to see the output here.

İki çıkış yolu var: başarı ve bir güvenlik limiti. Güvenlik limiti önemli. Garantili bir break yolu olmayan while (true), patlamayı bekleyen bir sonsuz döngüdür.

continue: Bir Sonraki İterasyona Atla

continue, mevcut iterasyonun gövdesinin geri kalanını atlayıp doğrudan bir sonraki koşul kontrolüne geçer:

index.js
Output
Click Run to see the output here.

Dikkat edilmesi gereken bir nokta var: Döngüyü ilerleten şey continue ifadesinden sonra kalıyorsa, kendi ellerinizle sonsuz döngü yaratmış olursunuz. Yukarıdaki örnekte n++ zaten continue'dan önce geldiği için sorun yok. Sonraya koysaydık, n sonsuza kadar aynı çift sayıda takılı kalırdı.

while vs for: Hangisini Kullanmalı?

Pratik bir kural listesi:

  • Belli bir aralığı saymak veya indekslemekfor. for (let i = 0; i < arr.length; i++) yazımı; sayaç tanımı, koşul ve artım adımını tek satırda toplar.
  • Bir koleksiyonu gezmekfor...of. İndeksle uğraşmaktan çok daha temiz.
  • Bir durum değişene kadar dönmekwhile. Kuyruk işleme, polling, stream tüketme, başarılı olana kadar tekrar deneme gibi senaryolar.
  • En az bir kere kesin çalışsındo...while.

Teoride hepsi birbirinin yerine geçebilir — her for bir while olarak yeniden yazılabilir, tersi de geçerli. Ama problemin şekline en çok uyanı seçmek, kodu kendi kendini anlatır hâle getirir.

Sonsuz Döngüler: Tek Bir Kural

Her while döngüsünün şu soruya net bir cevabı olmalı: bu döngüyü ne durduracak?

Ya başlıktaki koşul bir noktada false olacak ya da kesin çalışacağını bildiğiniz bir break olacak. Bu ikisinden birini parmağınızla gösteremiyorsanız, döngü henüz tamamlanmamış demektir.

// Kötü: koşul hiç değişmiyor
let ready = false;
while (!ready) {
    console.log("bekleniyor...");
    // burada `ready` değerini değiştiren hiçbir şey yok
}

// İyi: gövde koşulu etkiliyor
let ready = false;
let checks = 0;
while (!ready) {
    checks++;
    if (checks >= 3) ready = true;
}

Tarayıcıda sonsuz döngü sekmeyi kilitler. Node'da ise siz süreci öldürene kadar bir CPU çekirdeğini dibine kadar zorlar. Koda girmeden önce yakalamakta fayda var.

Sırada: for...of ve for...in

while, "bir şey değişene kadar" senaryosunu güzel çözüyor. Ama dizilerin, stringlerin ve nesnelerin elemanlarını tek tek dolaşmak için JavaScript'te tam bu işe göre tasarlanmış iki döngü daha var: bir sonraki konumuz for...of ve for...in.

Sıkça Sorulan Sorular

JavaScript'te while döngüsü nedir?

while döngüsü, verdiğiniz koşul true olduğu sürece gövdesini tekrar tekrar çalıştırır. JavaScript önce koşulu kontrol eder, sonra blok çalışır, ardından tekrar kontrol edilir. Eğer koşul en başta false ise gövde hiç çalışmaz — yani sıfır kez dönen bir döngü de mümkündür.

while ile do...while arasındaki fark nedir?

while koşulu gövdeyi çalıştırmadan önce kontrol ettiği için hiç dönmeyebilir. do...while ise önce gövdeyi bir kez çalıştırır, sonra koşulu kontrol eder — dolayısıyla en az bir tur garantilidir. Kullanıcıdan giriş isteme gibi, ilk iterasyonun koşulsuz yapılması gereken durumlarda do...while tercih edilir.

JavaScript'te while döngüsünden nasıl çıkılır?

Döngüden anında çıkmak için break, sadece o turu atlayıp bir sonrakine geçmek için continue kullanılır. while (true) gibi sonsuz döngüleri güvenle yazmanın yolu da budur: döngüyü sonsuz kurarsınız, gövdenin içinde bir koşul sağlandığında break ile çıkarsınız.

Coddy ile kodlamayı öğren

BAŞLA