[NODE JS] Ternary Operatör ve Kısa If Kullanımı
Selam arkadaşlar. Bugünkü konumuz ternary operatör ve kısa koşul yazımları. Basit bir konu gibi görünse de doğru kullanıldığında kodu çok daha temiz ve okunabilir hale getiriyor, yanlış kullanıldığında ise tam bir kabus oluyor. Ben iç içe ternary gördüğümde sinirleniyorum açıkçası, okunmuyor.
Ternary (Üçlü) Operatör
Ternary operatör basit if-else bloklarının yerine tek satırda yazılabilecek bir kısaltmadır. Sözdizimi: koşul ? doğruysa : yanlışsa. Değişken atama, JSX render, template literal içi gibi yerlerde çok kullanışlı. Ama karmaşık koşullarda kullanmayın, okunabilirliği düşürür.
Benim kuralım şu: ternary ile yazılan kod tek bakışta anlaşılıyorsa kullanırım, ikinci kez okumak gerekiyorsa if-else yazarım. Basit durum kontrolü ve değer atama için harika, iş mantığı için kötü.
JavaScript:
// === TERNARY OPERATÖR ===
// Temel kullanım
const yas = 20;
const durum = yas >= 18 ? 'Reşit' : 'Reşit değil';
console.log(durum); // 'Reşit'
// Değişken atama
const saat = new Date().getHours();
const selamlama = saat < 12 ? 'Günaydın'
: saat < 18 ? 'İyi günler'
: saat < 22 ? 'İyi akşamlar'
: 'İyi geceler';
console.log(selamlama);
// Fonksiyon çağrısı seçimi
const sayi = 7;
const sonuc = sayi % 2 === 0 ? 'Çift' : 'Tek';
console.log(`${sayi} sayısı ${sonuc}`);
// Template literal içinde
const kullanici = { isim: 'Ahmet', premium: true, bakiye: 1500 };
console.log(`${kullanici.isim} - ${kullanici.premium ? 'Premium Üye' : 'Standart Üye'}`);
console.log(`Bakiye: ${kullanici.bakiye > 1000 ? 'Yeterli' : 'Yetersiz'}`);
// Array/obje içinde koşullu eleman
const roller = ['user', ...(kullanici.premium ? ['premium'] : [])];
console.log('Roller:', roller);
const config = {
port: 3000,
...(process.env.NODE_ENV === 'production' ? {
ssl: true,
minify: true
} : {
debug: true,
sourceMaps: true
})
};
console.log('Config:', config);
// KÖTÜ KULLANIM - İç içe ternary (okunmuyor!)
// const mesaj = a > b ? (a > c ? 'a en büyük' : 'c en büyük') : (b > c ? 'b en büyük' : 'c en büyük');
// Bunun yerine if-else veya fonksiyon kullanın
function enBuyukBul(a, b, c) {
if (a >= b && a >= c) return `${a} en büyük`;
if (b >= a && b >= c) return `${b} en büyük`;
return `${c} en büyük`;
}
console.log(enBuyukBul(5, 8, 3));
Short-Circuit (Kısa Devre) Değerlendirme
JavaScript'te && ve || operatörleri sadece boolean döndürmez, kısa devre değerlendirmesi yapar. Bu özellik koşullu çalıştırma ve varsayılan değer atama için çok kullanışlı. Özellikle React'ta JSX içinde koşullu render için && çok sık kullanılır.
Geçen bir projede optional chaining yerine && zincirleme kullanan eski bir kod gördüm. Çalışıyordu ama çok karmaşıktı. Modern JavaScript'te optional chaining (?.) ve nullish coalescing (??) operatörleri bunların çoğunu daha temiz şekilde yapıyor.
JavaScript:
// === SHORT-CİRCUİT DEĞERLENDİRME ===
// && (AND) - İlk falsy değeri veya son değeri döndürür
console.log('--- AND (&&) ---');
console.log(true && 'merhaba'); // 'merhaba' (true ise sağ taraf)
console.log(false && 'merhaba'); // false (false ise sol taraf)
console.log('' && 'merhaba'); // '' (falsy)
console.log('ali' && 'veli'); // 'veli' (ikisi de truthy, son değer)
console.log(0 && 'merhaba'); // 0 (falsy)
// Koşullu çalıştırma
const yetkili = true;
yetkili && console.log('Yetkili kullanıcı, erişim sağlandı');
const config2 = { debug: true };
config2.debug && console.log('Debug modu aktif');
// || (OR) - İlk truthy değeri veya son değeri döndürür
console.log('
--- OR (||) ---');
console.log(false || 'varsayılan'); // 'varsayılan'
console.log('' || 'boş'); // 'boş'
console.log(null || 'null'); // 'null'
console.log(undefined || 'undef'); // 'undef'
console.log(0 || 42); // 42
console.log('değer' || 'varsayılan'); // 'değer'
// Varsayılan değer atama (eski yöntem)
const port = process.env.PORT || 3000;
const host = process.env.HOST || 'localhost';
console.log(`Sunucu: ${host}:${port}`);
// || operatörünün problemi: 0 ve '' de falsy!
const sayi2 = 0;
const sonuc2 = sayi2 || 42; // 42 (ama biz 0 istiyorduk!)
console.log('|| ile:', sonuc2); // 42 (yanlış!)
// ?? (Nullish Coalescing) - Sadece null ve undefined'da varsayılan kullanır
console.log('
--- Nullish Coalescing (??) ---');
const sonuc3 = sayi2 ?? 42; // 0 (doğru! 0 null/undefined değil)
console.log('?? ile:', sonuc3); // 0
console.log(null ?? 'varsayılan'); // 'varsayılan'
console.log(undefined ?? 'varsayılan'); // 'varsayılan'
console.log(0 ?? 42); // 0
console.log('' ?? 'boş'); // ''
console.log(false ?? true); // false
// ??= (Nullish assignment)
let a2 = null;
a2 ??= 'yeni değer';
console.log(a2); // 'yeni değer'
let b2 = 0;
b2 ??= 42;
console.log(b2); // 0 (null/undefined değil, atanmadı)
// ?. (Optional chaining) + ?? birlikte
const api = {
data: {
users: [{ name: 'Ali' }]
}
};
const userName = api?.data?.users?.[0]?.name ?? 'Bilinmiyor';
console.log('Kullanıcı:', userName); // 'Ali'
const missing = api?.data?.posts?.[0]?.title ?? 'Post bulunamadı';
console.log('Post:', missing); // 'Post bulunamadı'
// Gerçek dünya: konfigürasyon birleştirme
function sunucuBaslat(secenekler = {}) {
const ayar = {
port: secenekler.port ?? 3000,
host: secenekler.host ?? 'localhost',
ssl: secenekler.ssl ?? false,
maxBaglanti: secenekler.maxBaglanti ?? 100,
timeout: secenekler.timeout ?? 30000,
logSeviyesi: secenekler.logSeviyesi ?? 'info'
};
console.log('Sunucu ayarları:', ayar);
return ayar;
}
sunucuBaslat({ port: 8080, ssl: true });
sunucuBaslat();
Özetlemek gerekirse: basit koşullarda ternary, koşullu çalıştırmada &&, varsayılan değerlerde ?? kullanın. || ile varsayılan değer atarken 0 ve boş string tuzağına dikkat edin. Ve lütfen iç içe ternary yazmayın, gelecekteki siz de dahil olmak üzere kimse okuyamaz. Kolay gelsin.
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 1
- Görüntüleme
- 7
- Cevaplar
- 1
- Görüntüleme
- 13
- Cevaplar
- 1
- Görüntüleme
- 8
- Cevaplar
- 1
- Görüntüleme
- 12