Programlama dünyasında karar vermek, en sık karşılaşılan işlemlerden biridir. Uygulamalar, kullanıcının girişine göre ya da sistemden gelen değerlere göre farklı yollar izleyebilir. Bu tür durumları kontrol etmek için koşullu ifadeler kullanırız. JavaScript’te bunun temel yolu if
, else if
ve else
ifadeleridir.
Ancak bazen, bir şart gerçekleşmeden diğer şartlara bakmak istemeyiz. İşte burada devreye iç içe koşullu ifadeler, yani nesting conditionals girer. Bu makalede nesting yapısının ne olduğunu, neden ve nasıl kullanıldığını detaylıca inceleyeceğiz.
1. Temel Koşullu Yapılar
Önce koşullu ifadelerin basit halini hatırlayalım:
let age = 17;
if (age >= 18) {
console.log("Ehliyet alabilirsiniz.");
} else {
console.log("Yaşınız tutmuyor.");
}
Burada tek bir koşul kontrol ediliyor. Ama bazen birden fazla koşulu kontrol etmek gerekir. Ve bu koşullar birbirine bağlı olabilir. Örneğin, ikinci bir kontrolü ancak ilk şart sağlanıyorsa yapmak isteyebiliriz. Bu durumda iç içe yapılar devreye girer.
2. İç İçe Koşullu İfade Nedir?
İç içe koşullu ifade, bir if
bloğunun içinde başka bir if
bloğunun olmasıdır. Bu, kodun sadece belirli bir durumda çalışmasını sağlar.
Gerçek Hayattan Analojisi:
Bir müzeye giriş yapmak için önce biletin olması gerekir. Ama sadece bilet yeterli değildir; yanında kimlik de göstermen gerekebilir. Ancak bu kimlik kontrolü sadece biletin varsa yapılır. İşte bu mantık, iç içe koşullu ifadenin temelidir.
3. Örnek: Öğrenci Not Değerlendirme Sistemi
Diyelim ki bir öğrencinin notunu kontrol eden bir sistem yapıyoruz. Önce notun geçerli bir sayı olup olmadığına bakacağız. Eğer geçerliyse, ardından bu nota göre bir harf notu vereceğiz.
const score = parseInt(prompt("Notunuzu girin (0-100 arasında):"));
if (score >= 0 && score <= 100) {
if (score >= 90) {
console.log("Notunuz: A");
} else if (score >= 80) {
console.log("Notunuz: B");
} else if (score >= 70) {
console.log("Notunuz: C");
} else if (score >= 60) {
console.log("Notunuz: D");
} else {
console.log("Notunuz: F");
}
} else {
console.log("Geçersiz not girdiniz. Lütfen 0-100 arasında bir değer girin.");
}
Burada şu yapı var:
- Birinci if: Not geçerli mi?
- İkinci if bloğu (içerideki): Geçerliyse harf notunu belirle.
Bu yapı sayesinde hatalı not girilirse sistem boşuna harf hesaplamaz. Böylece gereksiz kontroller engellenir.
4. Neden Nested If Kullanmalıyız?
Bazı durumlarda &&
(mantıksal VE) operatörüyle birden fazla şartı tek satırda kontrol etmek mümkün olsa da, kodun okunabilirliği ve mantıksal akışı açısından nested yapı daha açıklayıcı olabilir.
Örnek Karşılaştırma:
// Tüm şartlar tek satırda
if (isMember && hasTicket && age >= 18) {
console.log("Etkinliğe katılabilirsiniz.");
}
Bu örnek kısa ama neyin neden kontrol edildiğini anlamak zor olabilir. Nested yapı kullanırsak:
if (isMember) {
if (hasTicket) {
if (age >= 18) {
console.log("Etkinliğe katılabilirsiniz.");
} else {
console.log("Yaş sınırını karşılamıyorsunuz.");
}
} else {
console.log("Etkinlik bileti yok.");
}
} else {
console.log("Üye değilsiniz.");
}
Bu daha uzun ama kontrol sırasını ve mantığı daha açık gösterir.
5. Dikkat Edilmesi Gereken Noktalar
İç içe koşullar kullanılırken bazı şeylere dikkat etmek gerekir:
- Gereksiz derinlikten kaçının: Çok fazla iç içe yapı, kodun okunmasını zorlaştırır.
- Gerekiyorsa
return
veya break
kullanarak erken çıkış yapın.
- Koşulların sırasını iyi belirleyin: En genel durumla başlamayın, özel ve filtreleyici durumlarla başlayın.
6. Alternatif Yöntem: Koşulları Birleştirmek
Eğer şartlar birbirinden bağımsız değilse ama sadeleştirilebiliyorsa, mantıksal operatörlerle tek satıra da indirgenebilir:
if (score >= 0 && score <= 100 && score >= 90) {
console.log("Notunuz: A");
}
Ama bu her zaman önerilmez. Nesting sayesinde kod akışı daha adım adım olur, özellikle yeni başlayanlar için daha anlaşılır hale gelir.
7. Uygulama: Ürün İade Sistemi
Bir mağazada ürün iadesi yapılabilmesi için şu şartlar olsun:
- Fatura var mı?
- İade süresi 30 günü geçmemiş mi?
- Ürün zarar görmemiş mi?
const hasReceipt = true;
const daysSincePurchase = 15;
const productDamaged = false;
if (hasReceipt) {
if (daysSincePurchase <= 30) {
if (!productDamaged) {
console.log("İade işlemi başarıyla tamamlandı.");
} else {
console.log("Zarar görmüş ürün iade alınamaz.");
}
} else {
console.log("İade süresi geçmiş.");
}
} else {
console.log("Fatura olmadan iade yapılamaz.");
}
Bu örnekte, her kontrol sadece bir önceki şart doğruysa yapılır. Bu, gerçek hayattaki işleyişe çok benzer.
Sonuç
İç içe koşullu ifadeler, programlamada daha kontrollü ve anlamlı kararlar vermek için güçlü bir yöntemdir. Özellikle bazı şartlar yalnızca başka şartlar sağlandığında kontrol edilmeliyse, nested yapı sayesinde:
- Gereksiz işlem yapmaktan kaçınılır,
- Kod daha okunabilir hale gelir,
- Hatalar daha kolay önlenir.
Yeni başlayan biri için nesting yapısı ilk başta karmaşık görünebilir. Ancak bu yapının mantığını kavradıktan sonra, karmaşık mantıksal durumları çok daha kolay bir şekilde kodlayabilirsiniz. Nesting conditionals, ileride öğreneceğiniz daha gelişmiş yapılar için sağlam bir temel oluşturur.