JavaScript’te While ve Do…While Döngüleri: Temel Tekrarlama Yapıları
Programlamada belirli bir kod bloğunu birden fazla kez çalıştırma ihtiyacı sıkça doğar. Bu tekrarlayan görevleri otomatikleştirmek için döngüler (loops) kullanılır. JavaScript’te yaygın olarak kullanılan döngü türlerinden ikisi while ve do...while döngüleridir. Bu rehberde, her iki döngünün nasıl çalıştığını, sözdizimlerini, örneklerini ve hangi senaryolarda tercih edilmeleri gerektiğini detaylı bir şekilde inceleyeceğiz.
Döngüler Neden Önemlidir?
Döngüler, kod tekrarını azaltır, programları daha verimli ve okunabilir hale getirir. Örneğin, bir listedeki tüm elemanları işlemek, kullanıcıdan geçerli bir girdi alınana kadar tekrar tekrar sormak veya belirli bir koşul karşılanana kadar bir işlemi sürdürmek gibi görevler, döngüler olmadan çok daha karmaşık ve hataya açık olurdu.
While Döngüsü: Koşul Öncesi Kontrol
while döngüsü, belirli bir koşul doğru (true) olduğu sürece bir kod bloğunu tekrar tekrar çalıştıran bir yapıdır. Bu döngü, “ön koşullu döngü” olarak da bilinir, çünkü döngüye başlamadan önce koşul kontrol edilir. Eğer koşul başlangıçta yanlış (false) ise, döngünün içindeki kod bloğu hiçbir zaman çalışmayabilir.
While Döngüsünün Sözdizimi
while (koşul) {
// Koşul doğru olduğu sürece çalışacak kod
// (Döngü koşulunu bir noktada yanlış yapacak bir ifade olmalı)
}
While Döngüsü Nasıl Çalışır?
- Döngüye başlamadan önce
(koşul)ifadesi değerlendirilir. - Eğer koşul
trueise, döngünün süslü parantezleri{}içindeki kod bloğu çalıştırılır. - Kod bloğu çalıştırıldıktan sonra, koşul tekrar değerlendirilir.
- Bu süreç, koşul
falseolana kadar devam eder. - Koşul
falseolduğunda, döngü sona erer ve program döngüden sonraki ilk kod satırından devam eder.
While Döngüsü Örnekleri
Örnek 1: Basit Bir Sayaç
Bu örnekte, sayac değişkeni 5’ten küçük olduğu sürece konsola değerini yazdırıyoruz ve her iterasyonda sayac‘ı bir artırıyoruz. Bu artırma işlemi, döngünün bir noktada sona ermesini sağlar.
let sayac = 0;
while (sayac < 5) {
console.log("Sayı: " + sayac);
sayac++; // Bu ifade olmazsa sonsuz döngü oluşur!
}
// Çıktı:
// Sayı: 0
// Sayı: 1
// Sayı: 2
// Sayı: 3
// Sayı: 4
Örnek 2: Kullanıcıdan Geçerli Girdi Alma
Kullanıcıdan belirli bir girdi alınana kadar tekrar tekrar sormak gibi durumlarda while döngüsü oldukça kullanışlıdır.
let kullaniciCevabi = "";
while (kullaniciCevabi !== "evet" && kullaniciCevabi !== "hayır") {
kullaniciCevabi = prompt("Lütfen 'evet' veya 'hayır' yazın:").toLowerCase();
if (kullaniciCevabi !== "evet" && kullaniciCevabi !== "hayır") {
alert("Geçersiz giriş. Lütfen tekrar deneyin.");
}
}
console.log("Cevabınız: " + kullaniciCevabi);
Pratik Bilgi: Sonsuz Döngülerden Kaçınma
while döngülerinde en yaygın hatalardan biri, döngü koşulunun hiçbir zaman false olmaması durumunda ortaya çıkan "sonsuz döngüdür". Bir sonsuz döngü, programınızın takılmasına ve yanıt vermemesine neden olur. Bunu önlemek için, döngü koşulunu bir noktada yanlış yapacak bir ifadeyi (genellikle bir değişkenin güncellenmesi) döngü bloğunun içine eklediğinizden emin olun.
Do...While Döngüsü: Koşul Sonrası Kontrol
do...while döngüsü de bir koşul doğru olduğu sürece bir kod bloğunu çalıştırır, ancak önemli bir farkı vardır: kod bloğu en az bir kez çalıştırıldıktan sonra koşul kontrol edilir. Bu nedenle, do...while döngüleri "son koşullu döngü" olarak adlandırılır. Koşul başlangıçta yanlış olsa bile, döngünün içindeki kod bloğu mutlaka bir kez çalışacaktır.
Do...While Döngüsünün Sözdizimi
do {
// En az bir kez çalışacak kod
// (Döngü koşulunu bir noktada yanlış yapacak bir ifade olmalı)
} while (koşul); // Koşul doğru olduğu sürece tekrar çalışır
Do...While Döngüsü Nasıl Çalışır?
- Önce
dobloğundaki kod çalıştırılır. - Kod bloğu çalıştırıldıktan sonra,
while (koşul)ifadesi değerlendirilir. - Eğer koşul
trueise, döngü tekrar eder vedobloğu bir kez daha çalıştırılır. - Bu süreç, koşul
falseolana kadar devam eder. - Koşul
falseolduğunda, döngü sona erer.
Do...While Döngüsü Örnekleri
Örnek 1: Basit Bir Sayaç
while döngüsüyle aynı sayacı do...while ile de yapabiliriz. Ancak burada i=0 iken bile kod bloğu bir kez çalışır, sonra i < 5 koşulu kontrol edilir.
let i = 0;
do {
console.log("Sayı: " + i);
i++;
} while (i < 5);
// Çıktı:
// Sayı: 0
// Sayı: 1
// Sayı: 2
// Sayı: 3
// Sayı: 4
Örnek 2: Minimum Bir Kez Çalışması Gereken Durum (Menü Sistemi)
Bir kullanıcıya menü seçenekleri sunup geçerli bir seçim yapana kadar tekrar sormak gibi durumlarda do...while döngüsü idealdir, çünkü menüyü kullanıcıya en az bir kez göstermeniz gerekir.
let secim;
do {
secim = prompt("Lütfen bir işlem seçin:\n1. Bakiye Sorgulama\n2. Para Yatırma\n3. Para Çekme\n4. Çıkış");
switch (secim) {
case "1":
console.log("Bakiyeniz: XXX TL");
break;
case "2":
console.log("Para yatırma işlemi...");
break;
case "3":
console.log("Para çekme işlemi...");
break;
case "4":
console.log("Çıkış yapılıyor...");
break;
default:
alert("Geçersiz seçim. Lütfen 1-4 arasında bir sayı girin.");
}
} while (secim !== "4");
console.log("İşlem tamamlandı.");
While ve Do...While Döngülerinin Karşılaştırması ve Ne Zaman Hangisini Kullanmalı?
İki döngü arasındaki temel fark, koşul kontrolünün ne zaman yapıldığıdır. Bu fark, hangi döngünün belirli bir senaryo için daha uygun olduğunu belirler.
Temel Farklar
whiledöngüsü: Koşul döngüye girmeden önce kontrol edilir. Eğer koşul başlangıçtafalseise, döngü bloğu hiçbir zaman çalışmayabilir.do...whiledöngüsü: Kod bloğu en az bir kez çalıştırıldıktan sonra koşul kontrol edilir. Bu nedenle, döngü bloğu mutlaka en az bir kez çalışır.
Ne Zaman while Kullanmalı?
- Döngünün hiç çalışmama ihtimali varsa.
- Döngüye başlamadan önce bir koşulun sağlanması gerekiyorsa.
- İterasyon sayısı önceden belli değilse ve bir koşulun karşılanmasına bağlı olarak döngünün devam etmesi gerekiyorsa (örneğin, dosya sonuna ulaşana kadar okuma).
Ne Zaman do...while Kullanmalı?
- Döngüdeki kodun en az bir kez çalışmasını garanti etmeniz gerekiyorsa.
- Özellikle kullanıcıdan girdi alırken ve bu girdinin geçerliliğini kontrol ederken (kullanıcıya mutlaka bir kez sormanız gerekir).
- Menü sistemleri veya ilk çalıştırmada bir kaynak yüklemeniz/bir durumu başlatmanız gereken durumlar.
Döngü Kontrol Deyimleri: break ve continue
while ve do...while döngülerinin davranışını daha esnek bir şekilde kontrol etmek için break ve continue anahtar kelimelerini kullanabiliriz.
break Deyimi
break deyimi, içinde bulunduğu döngüyü tamamen sonlandırmak ve döngüden hemen çıkmak için kullanılır. Döngüden çıktıktan sonra program, döngüden sonraki ilk kod satırından devam eder.
let sayi = 0;
while (true) { // Bu sonsuz bir döngü gibi görünür, ama break ile kontrol edilir
console.log("Sayı: " + sayi);
sayi++;
if (sayi === 5) {
break; // Sayı 5 olunca döngüyü kır
}
}
console.log("Döngü break ile sonlandırıldı.");
// Çıktı:
// Sayı: 0
// Sayı: 1
// Sayı: 2
// Sayı: 3
// Sayı: 4
// Döngü break ile sonlandırıldı.
continue Deyimi
continue deyimi, döngünün mevcut iterasyonunu atlamak ve bir sonraki iterasyona geçmek için kullanılır. continue karşılaşıldığında, döngü bloğunun kalan kısmı atlanır ve döngü koşulu tekrar kontrol edilerek bir sonraki iterasyona geçilir (eğer koşul hala doğruysa).
let j = 0;
while (j < 10) {
j++;
if (j % 2 === 0) { // Eğer sayı çiftse, bu iterasyonu atla
continue;
}
console.log("Tek sayı: " + j);
}
// Çıktı:
// Tek sayı: 1
// Tek sayı: 3
// Tek sayı: 5
// Tek sayı: 7
// Tek sayı: 9
Sonuç ve Sıkça Sorulan Sorular (SSS)
while ve do...while döngüleri, JavaScript'te tekrarlayan görevleri yönetmek için güçlü ve esnek araçlardır. Temel farkları, koşulun döngüye girmeden önce mi yoksa en az bir kez çalıştıktan sonra mı kontrol edildiğidir. Bu farkı anlamak, doğru döngü yapısını seçerek daha sağlam ve verimli kod yazmanıza yardımcı olacaktır. break ve continue deyimleri ise döngü akışını daha da hassas bir şekilde kontrol etmenizi sağlar.
Sıkça Sorulan Sorular (SSS)
S: Sonsuz döngü nedir ve nasıl önlenir?
C: Sonsuz döngü, döngü koşulunun hiçbir zaman false olmayacak şekilde ayarlandığı bir döngüdür. Bu, programınızın takılmasına neden olur. Önlemek için, döngü bloğu içinde döngü koşulunu bir noktada yanlış yapacak bir ifade (örneğin, bir sayacı artırma veya bir boolean bayrağı değiştirme) bulundurduğunuzdan emin olun.
S: while ve do...while arasındaki temel fark nedir?
C: Temel fark, koşulun kontrol edilme zamanıdır. while döngüsü koşulu başta kontrol eder; bu yüzden döngü hiç çalışmayabilir. do...while döngüsü ise kodu en az bir kez çalıştırdıktan sonra koşulu kontrol eder, bu da kod bloğunun mutlaka bir kez çalışmasını garanti eder.
S: Hangi döngüyü ne zaman kullanmalıyım?
C: Döngünün hiç çalışmama ihtimali varsa veya döngüye başlamadan önce bir koşulun sağlanması gerekiyorsa while döngüsünü tercih edin. Döngüdeki kodun en az bir kez çalışmasını garanti etmeniz gerekiyorsa (örneğin, kullanıcıdan geçerli bir girdi alınana kadar tekrar sormak gibi), do...while döngüsünü kullanın.
S: break ve continue ne işe yarar?
C: break deyimi, içinde bulunduğu döngüyü tamamen sonlandırır ve programı döngüden çıkarır. continue deyimi ise döngünün mevcut iterasyonunu atlar ve bir sonraki iterasyona geçilmesini sağlar.
S: for döngüsü yerine while ne zaman tercih edilir?
C: Eğer iterasyon sayısı önceden kesin olarak biliniyorsa (örneğin bir dizideki eleman sayısı kadar dönmek), genellikle for döngüsü daha okunabilir ve uygundur. Ancak, iterasyon sayısı önceden bilinmediğinde veya bir koşulun karşılanmasına bağlı olarak döngünün devam etmesi gerektiğinde (örneğin, kullanıcı "çıkış" yazana kadar), while döngüsü daha uygun bir seçenektir.