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!
[NODE JS] Switch-Case ile Karar Yapıları
Merhaba arkadaşlar. Bugün switch-case yapısını inceleyeceğiz. Çoğu kişi if-else zincirine alışkın ve switch'i pek kullanmıyor ama belirli senaryolarda switch çok daha okunabilir ve performanslı. Ben genelde üçten fazla koşul olduğunda switch'e geçiyorum, özellikle bir değişkenin sabit değerlere göre farklı davranması gereken durumlarda.
Switch-Case Temelleri
Switch ifadesi bir değişkeni birden fazla sabit değerle karşılaştırır. if-else zincirinden farkı, sadece eşitlik kontrolü yapmasıdır. Büyüktür, küçüktür gibi karşılaştırmalar switch ile doğrudan yapılamaz. Break ifadesini unutmak en yaygın hatadır ve bazen bu özellik kasıtlı olarak kullanılır, buna fall-through denir.
Tecrübeme göre switch en çok şu senaryolarda işe yarar: HTTP status code'ları, komut parse etme, durum makineleri (state machines), menü seçenekleri. Bu tür sabit değer eşleştirmelerinde if-else yazmak çok daha karmaşık görünür.
JavaScript:
// === SWİTCH-CASE TEMELLERİ ===
// Temel kullanım
const gun = new Date().getDay(); // 0-6 (Pazar-Cumartesi)
switch (gun) {
case 0:
console.log('Bugün Pazar - Tatil günü');
break;
case 1:
console.log('Bugün Pazartesi - Haftanın ilk günü');
break;
case 2:
console.log('Bugün Salı');
break;
case 3:
console.log('Bugün Çarşamba - Haftanın ortası');
break;
case 4:
console.log('Bugün Perşembe');
break;
case 5:
console.log('Bugün Cuma - Hafta sonu yaklaşıyor');
break;
case 6:
console.log('Bugün Cumartesi - Tatil!');
break;
default:
console.log('Geçersiz gün');
}
// Fall-through kullanımı (kasıtlı olarak break koymama)
switch (gun) {
case 1:
case 2:
case 3:
case 4:
case 5:
console.log('İş günü');
break;
case 0:
case 6:
console.log('Hafta sonu');
break;
}
// HTTP Status Code işleme
function statusAcikla(code) {
switch (code) {
case 200: return 'Başarılı';
case 201: return 'Oluşturuldu';
case 204: return 'İçerik Yok';
case 301: return 'Kalıcı Yönlendirme';
case 302: return 'Geçici Yönlendirme';
case 400: return 'Geçersiz İstek';
case 401: return 'Yetkisiz';
case 403: return 'Yasak';
case 404: return 'Bulunamadı';
case 429: return 'Çok Fazla İstek';
case 500: return 'Sunucu Hatası';
case 502: return 'Kötü Ağ Geçidi';
case 503: return 'Hizmet Kullanılamıyor';
default: return `Bilinmeyen durum kodu: ${code}`;
}
}
[200, 404, 500, 302].forEach(code => {
console.log(`${code}: ${statusAcikla(code)}`);
});
Switch'in Modern Alternatifleri
Şimdi bir şeyi söylemeliyim: modern JavaScript'te switch yerine obje lookup veya Map kullanmak genellikle daha temiz bir yaklaşım. Özellikle sadece değer eşleştirmesi yapıyorsanız bir obje çok daha kısa ve bakımı kolay. Ama switch'in avantajı, case bloklarında kompleks işlemler yapabilmeniz ve fall-through gibi özellikler kullanabilmeniz.
Ha bu arada, switch strict equality (===) kullanır, yani "5" ile 5 aynı değildir. Bu detayı bilmezseniz saatlerce debug edebilirsiniz. Ben başıma geldi bir keresinde, form'dan gelen string değeri number case ile karşılaştırıyordum ve hiçbir case tutmuyordu.
JavaScript:
// === MODERN ALTERNATİFLER ===
// Obje lookup pattern (switch alternatifi)
const islemler = {
topla: (a, b) => a + b,
cikar: (a, b) => a - b,
carp: (a, b) => a * b,
bol: (a, b) => b !== 0 ? a / b : 'Sıfıra bölme hatası',
mod: (a, b) => a % b,
us: (a, b) => Math.pow(a, b)
};
function hesapla(islem, a, b) {
const fn = islemler[islem];
if (!fn) return `Geçersiz işlem: ${islem}`;
return fn(a, b);
}
console.log(hesapla('topla', 10, 5)); // 15
console.log(hesapla('carp', 4, 3)); // 12
console.log(hesapla('bol', 10, 0)); // Sıfıra bölme hatası
// Map ile switch alternatifi
const komutlar = new Map([
['help', () => console.log('Yardım menüsü gösteriliyor...')],
['version', () => console.log('v1.0.0')],
['status', () => console.log('Sunucu çalışıyor')],
['stop', () => console.log('Sunucu durduruluyor...')]
]);
function komutCalistir(komut) {
const fn = komutlar.get(komut);
if (fn) {
fn();
} else {
console.log(`Bilinmeyen komut: ${komut}. 'help' yazın.`);
}
}
komutCalistir('version');
komutCalistir('status');
komutCalistir('bilinmeyen');
// Durum makinesi (State Machine) örneği
class SiparisDurumMakinesi {
constructor() {
this.durum = 'beklemede';
}
gecis(aksiyon) {
switch (this.durum) {
case 'beklemede':
if (aksiyon === 'onayla') this.durum = 'onaylandi';
else if (aksiyon === 'iptal') this.durum = 'iptal_edildi';
break;
case 'onaylandi':
if (aksiyon === 'hazirla') this.durum = 'hazirlaniyor';
else if (aksiyon === 'iptal') this.durum = 'iptal_edildi';
break;
case 'hazirlaniyor':
if (aksiyon === 'kargola') this.durum = 'kargoda';
break;
case 'kargoda':
if (aksiyon === 'teslim') this.durum = 'teslim_edildi';
break;
case 'teslim_edildi':
case 'iptal_edildi':
console.log(` Son durum: ${this.durum}, geçiş yapılamaz`);
return;
default:
console.log(' Geçersiz durum!');
return;
}
console.log(` ${aksiyon} -> Yeni durum: ${this.durum}`);
}
}
const siparis = new SiparisDurumMakinesi();
console.log('
--- Sipariş Durumu ---');
siparis.gecis('onayla');
siparis.gecis('hazirla');
siparis.gecis('kargola');
siparis.gecis('teslim');
siparis.gecis('iptal'); // Son durumda, geçiş yapılamaz
Switch-case basit ama güçlü bir araç. Doğru yerde kullanıldığında kodu çok daha okunabilir yapıyor. Break unutmayın, default case her zaman ekleyin, ve strict equality davranışını aklınızda tutun. Kolay gelsin.
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 2
- Görüntüleme
- 238
- Cevaplar
- 2
- Görüntüleme
- 15
- Cevaplar
- 2
- Görüntüleme
- 35
- Cevaplar
- 2
- Görüntüleme
- 19
- Cevaplar
- 2
- Görüntüleme
- 17
