Sevdamsın 1
Sevdamsın
farkmt2official 1
farkmt2official
emirhanHCL 1
emirhanHCL
Scarlet 1
Scarlet
Best Studio 1
Best Studio
mannaxxx 1
mannaxxx
Agora Metin2 1
Agora Metin2
Hikaye Ekle

Altın Konu [NODE JS] Node.js'te Döngüler (for, while, for...of)

Türkiye'de ilk Mobil & PC Aynı Anda Metin2 Oyna. Triarchonline kalıcı ve uzun ömürlü yapısı ile 24 Temmuz'da açılıyor. | 1-99 Mobil Metin2 Triarch HEMEN TIKLA!

nodejs.png


[NODE JS] Node.js'te Döngüler (for, while, for...of)​


Selam arkadaşlar. Döngüler her programlama dilinin temel taşıdır ve Node.js'te de birçok farklı döngü yapısı mevcut. Bugün tüm döngü türlerini, hangi durumda hangisini kullanmanız gerektiğini ve sık yapılan hataları anlatacağım. Ben genelde hangi döngüyü nerede kullanacağımı seçerken performans ve okunabilirlik dengesine bakıyorum.

Klasik for Döngüsü​


En temel döngü yapısı. Başlangıç değeri, koşul ve artış/azalış ifadesinden oluşur. Sayı bazlı iterasyonlarda ve indekse ihtiyaç duyduğunuz durumlarda kullanışlı. Ama modern JavaScript'te array üzerinde dönmek için genellikle for...of veya array metodlarını tercih ediyorum.

Yeni başlayanlar bazen sonsuz döngü hatası yapıyor. Koşul hiçbir zaman false olmazsa döngü sonsuza kadar devam eder ve uygulamanız çöker. Bu özellikle Node.js'te tehlikeli çünkü event loop'u bloklar ve sunucu yanıt veremez hale gelir.

JavaScript:
// === FOR DÖNGÜSÜ ===

// Temel for
for (let i = 0; i < 5; i++) {
    console.log(`Adım ${i + 1}`);
}

// Tersten sayma
for (let i = 10; i >= 0; i--) {
    process.stdout.write(`${i} `);
}
console.log('Kalkış!');

// İkişer atlama
for (let i = 0; i <= 20; i += 2) {
    process.stdout.write(`${i} `);
}
console.log('');

// İç içe döngü - çarpım tablosu
console.log('
--- Çarpım Tablosu ---');
for (let i = 1; i <= 5; i++) {
    let satir = '';
    for (let j = 1; j <= 10; j++) {
        satir += `${(i * j).toString().padStart(4)}`;
    }
    console.log(`${i}: ${satir}`);
}

// break ve continue
console.log('
--- Break ve Continue ---');
for (let i = 0; i < 20; i++) {
    if (i === 5) continue;  // 5'i atla
    if (i === 12) break;    // 12'de dur
    process.stdout.write(`${i} `);
}
console.log('');

// Etiketli döngü (labeled loop) - iç içe döngüden çıkmak için
console.log('
--- Etiketli Döngü ---');
dis: for (let i = 0; i < 5; i++) {
    for (let j = 0; j < 5; j++) {
        if (i === 2 && j === 3) break dis; // Dış döngüden çıkar
        process.stdout.write(`(${i},${j}) `);
    }
    console.log('');
}
console.log('');

// === WHILE DÖNGÜSÜ ===
console.log('
--- While ---');
let sayac = 0;
while (sayac < 5) {
    console.log(`While sayac: ${sayac}`);
    sayac++;
}

// do...while - en az bir kez çalışır
console.log('
--- Do While ---');
let num = 10;
do {
    console.log(`Do-while: ${num}`);
    num--;
} while (num > 7);

for...in ve for...of Farkı​


Bu iki döngü türü sıkça karıştırılıyor. for...in obje key'leri üzerinde döner, for...of ise iterable'ların değerleri üzerinde döner. Array'lerde for...in kullanmak tehlikeli olabilir çünkü prototype chain'deki property'leri de getirebilir. Ben array'lerde her zaman for...of kullanıyorum.

Geçen bir projede birileri array'de for...in kullanmıştı ve prototype'a eklenen bir metod yüzünden döngüde fazladan iterasyon çıkıyordu. Bu tür bugları bulmak zor, tecrübe gerektirir.

JavaScript:
// === FOR...IN vs FOR...OF ===

// for...in: obje property'leri (key'ler) üzerinde döner
const araba = {
    marka: 'Toyota',
    model: 'Corolla',
    yil: 2023,
    renk: 'beyaz'
};

console.log('--- for...in (Obje) ---');
for (const key in araba) {
    console.log(`${key}: ${araba[key]}`);
}

// for...of: iterable değerler üzerinde döner
const sehirler = ['İstanbul', 'Ankara', 'İzmir', 'Bursa', 'Antalya'];

console.log('
--- for...of (Array) ---');
for (const sehir of sehirler) {
    console.log(`Şehir: ${sehir}`);
}

// for...of ile index alma (entries)
console.log('
--- for...of + entries ---');
for (const [index, sehir] of sehirler.entries()) {
    console.log(`${index + 1}. ${sehir}`);
}

// String üzerinde for...of
console.log('
--- String üzerinde for...of ---');
for (const karakter of 'Node.js') {
    process.stdout.write(`[${karakter}] `);
}
console.log('');

// Map üzerinde for...of
const fiyatlar = new Map([
    ['elma', 15],
    ['armut', 20],
    ['muz', 35],
    ['çilek', 50]
]);

console.log('
--- Map üzerinde for...of ---');
for (const [urun, fiyat] of fiyatlar) {
    console.log(`${urun}: ${fiyat} TL`);
}

// Set üzerinde for...of
const benzersizSayilar = new Set([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]);
console.log('
--- Set üzerinde for...of ---');
for (const sayi of benzersizSayilar) {
    process.stdout.write(`${sayi} `);
}
console.log('');

// Performans karşılaştırması
console.log('
--- Performans Testi ---');
const buyukDizi = Array.from({ length: 1000000 }, (_, i) => i);

console.time('for klasik');
let toplam1 = 0;
for (let i = 0; i < buyukDizi.length; i++) {
    toplam1 += buyukDizi[i];
}
console.timeEnd('for klasik');

console.time('for...of');
let toplam2 = 0;
for (const val of buyukDizi) {
    toplam2 += val;
}
console.timeEnd('for...of');

console.time('forEach');
let toplam3 = 0;
buyukDizi.forEach(val => { toplam3 += val; });
console.timeEnd('forEach');

console.time('reduce');
const toplam4 = buyukDizi.reduce((a, b) => a + b, 0);
console.timeEnd('reduce');

Döngü seçimi konusunda benim yaklaşımım şöyle: array'lerde genellikle map, filter, reduce gibi fonksiyonel metodları tercih ediyorum. Eğer döngü içinde break veya continue lazımsa for...of kullanıyorum. Objelerde for...in, sayısal iterasyonda klasik for. while'ı çok nadir kullanıyorum, genellikle bir koşul sağlanana kadar beklemek gereken senaryolarda. Kolay gelsin.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst