Müzakirə

JavaScript Karar Yapıları ve If Else Kullanımı

Başladan QuantumBerk · 10 iyl 2026 17:20 · 19 Baxış · 0 Cavablar
Mövzunu Açan #0
Bir programın akışını yönlendirmek, belirli koşullara göre farklı işlemler yapmak, yazılım geliştirmenin temel taşlarından biridir. İşte bu noktada karar yapıları devreye giriyor. JavaScript'te de durum farklı değil; kodunuzun belirli bir durumda nasıl davranacağını belirlemek için koşullu ifadeler kullanırız.

Koşullu İfadelerin Temel Mantığı

Herhangi bir programlama dilinde, "eğer bu doğruysa, şunu yap; değilse, başka bir şey yap" mantığı kritik önem taşır. Bu, programlarımıza bir nevi "düşünme" yeteneği kazandırır, dinamik ve etkileşimli olmalarını sağlar. Bir web sayfasında kullanıcının giriş yapıp yapmadığını kontrol etmekten, bir oyunun belirli bir seviyesine ulaşıldığında yeni özellikler açmaya kadar, her yerde koşullu mantık vardır.

Basit if Yapısı

En temel koşul ifadesi elbette if yapısıdır. Sadece belirli bir koşulun doğru olup olmadığını kontrol eder ve doğruysa, parantez içindeki kodu çalıştırır. Koşul yanlışsa, o kod bloğu atlanır ve program akışı devam eder.

CODE
123456789101112
let havaDurumu = "yağmurlu";

if (havaDurumu === "yağmurlu") {
    console.log("Şemsiyeni almayı unutma!"); // Koşul doğru olduğu için bu çalışır
}

let sicaklik = 10;

if (sicaklik > 25) {
    console.log("Hava çok sıcak!"); // Koşul yanlış, bu çalışmaz
}


Burada önemli olan, if parantezlerinin içine yazılan ifadenin bir Boolean değerine (true veya false) dönüşmesidir. havaDurumu === "yağmurlu" ifadesi true olduğu için ilk blok çalışır. İkinci örnekte sicaklik > 25 ifadesi false olduğu için o blok atlanır. Basit gibi görünse de, programlamanın tüm karmaşık yapıları bu temel prensip üzerine inşa edilmiştir.

if-else Yapısının Gücü

Peki ya bir koşul doğru olmadığında da belirli bir işlem yapmak istiyorsak? İşte o zaman else devreye girer. if-else yapısı, iki farklı yol sunar: eğer koşul doğruysa birinci bloğu, yanlışsa ikinci bloğu çalıştırır. Bu, programınızın her zaman bir alternatif eylem planına sahip olmasını sağlar.

CODE
12345678
let yas = 17;

if (yas >= 18) {
    console.log("Ehliyet alabilirsiniz.");
} else {
    console.log("Ehliyet almak için yaşınız yeterli değil."); // yas 18'den küçük olduğu için bu çalışır
}


Bu örnekte, yas >= 18 koşulu false olduğu için else bloğu çalışır. Böylece programınız, kullanıcının yaşına göre net bir geri bildirim vermiş oluyor. Özellikle kullanıcı etkileşimlerinde veya hata yönetiminde if-else kalıbı vazgeçilmezdir.

Birden Fazla Koşul İçin else if Zincirleri

Hayatta her zaman sadece iki seçenek olmaz, değil mi? Bazen birden fazla, birbirini dışlayan koşulu kontrol etmemiz gerekebilir. Örneğin, bir öğrencinin notuna göre farklı derecelendirmeler yapmak gibi. Bu gibi durumlarda else if zincirlerini kullanırız. JavaScript, yukarıdan aşağıya doğru koşulları kontrol eder ve ilk doğru bulduğu bloğu çalıştırıp tüm if-else if-else yapısından çıkar.

CODE
1234567891011121314151617
let puan = 75;
let not;

if (puan >= 90) {
    not = "A";
} else if (puan >= 80) {
    not = "B";
} else if (puan >= 70) {
    not = "C"; // puan 75 olduğu için bu koşul doğru, bu blok çalışır
} else if (puan >= 60) {
    not = "D";
} else {
    not = "F";
}

console.log("Öğrencinin notu: " + not); // Çıktı: Öğrencinin notu: C


Bu yapıda sıralama çok kritik. Eğer puan >= 70 koşulunu en üste koysaydık, 95 puan alan bir öğrenci bile "C" notu alırdı, çünkü o koşul ilk olarak doğru bulunurdu. Bu yüzden, daha spesifik veya daha kısıtlayıcı koşulları genellikle zincirin başında tutmak iyi bir pratiktir.

İç İçe if Yapıları (Nested if)

Bazen bir koşulun doğruluğu, başka bir koşulun doğruluğuna bağlı olabilir. İşte bu senaryoda iç içe if yapıları kullanışlıdır. Bir if veya else bloğunun içine başka bir if ifadesi yazabilirsiniz.

CODE
1234567891011121314
let kullaniciGirisYaptiMi = true;
let yoneticiMi = false;

if (kullaniciGirisYaptiMi) {
    console.log("Kullanıcı giriş yaptı.");
    if (yoneticiMi) {
        console.log("Yönetici paneline erişim izni verildi.");
    } else {
        console.log("Yönetici değilsiniz, normal kullanıcı paneline yönlendiriliyorsunuz.");
    }
} else {
    console.log("Giriş yapmanız gerekiyor.");
}


Bu örnekte, önce kullanıcının giriş yapıp yapmadığı kontrol edilir. Eğer giriş yaptıysa, ancak o zaman kullanıcının yönetici olup olmadığına bakılır. İç içe if'ler, karmaşık iş mantığını ifade etmek için güçlüdür, ancak çok fazla iç içe geçmek kodun okunabilirliğini ve bakımını zorlaştırabilir. Derin iç içe geçmelerden kaçınmak adına bazen mantıksal operatörler veya fonksiyonlara ayırma gibi başka yaklaşımlar daha iyi sonuç verir.

Mantıksal Operatörler: &&, ||, !

Tek bir if koşulu içinde birden fazla durumu kontrol etmek istediğimizde mantıksal operatörler imdadımıza yetişir. Bunlar, birden fazla Boolean ifadesini birleştirerek tek bir nihai Boolean değeri elde etmemizi sağlar.

  • && (VE): Her iki koşul da doğruysa genel ifade true olur. Aksi takdirde false döner.
    CODE
    1234567
    let yas = 20;
    let ehliyetVarMi = true;
    
    if (yas >= 18 && ehliyetVarMi) {
        console.log("Araba kullanabilirsin."); // Her iki koşul da doğru
    }
    

  • || (VEYA): Koşullardan en az biri doğruysa genel ifade true olur. Her ikisi de yanlışsa false döner.
    CODE
    1234567
    let havaGunesli = false;
    let haftaSonu = true;
    
    if (havaGunesli || haftaSonu) {
        console.log("Pikniğe gidebiliriz!"); // haftaSonu true olduğu için koşul doğru
    }
    

  • ! (DEĞİL): Bir Boolean değerini tersine çevirir. true ise false, false ise true yapar.
    CODE
    123456
    let kullaniciAktif = false;
    
    if (!kullaniciAktif) {
        console.log("Kullanıcı şu anda aktif değil."); // !false true'ya döner
    }
    

Bu operatörler, iç içe if'lerin karmaşıklığını azaltmada harikadır ve kodunuzu daha okunaklı hale getirebilir. Örneğin, yukarıdaki iç içe if örneğini mantıksal operatörle tek bir if içinde yazabiliriz:

CODE
12345678
if (kullaniciGirisYaptiMi && yoneticiMi) {
    console.log("Yönetici paneline erişim izni verildi.");
} else if (kullaniciGirisYaptiMi && !yoneticiMi) {
    console.log("Yönetici değilsiniz, normal kullanıcı paneline yönlendiriliyorsunuz.");
} else {
    console.log("Giriş yapmanız gerekiyor.");
}


Gördüğünüz gibi, bu versiyon biraz daha düz ve belki de okunabilirliği artırıyor. Seçim, genellikle projenin gereksinimlerine ve kişisel kodlama tarzınıza bağlıdır.

Kısa Devre Değerlendirmesi (Short-Circuit Evaluation)

JavaScript'teki && ve || operatörleri "kısa devre" mantığıyla çalışır. Bu, ikinci operandın her zaman değerlendirilmediği anlamına gelir.

  • && için: Eğer ilk koşul false ise, ikinci koşulun değeri ne olursa olsun tüm ifade false olacağından, JavaScript ikinci koşulu kontrol etmeye gerek duymaz.
    CODE
    123456789
    let kullanici = null;
    // Bu örnekte, 'kullanici' null olduğu için ilk koşul (kullanici && ...) false döner.
    // Dolayısıyla 'kullanici.name' kısmına hiç bakılmaz, hata oluşmaz.
    if (kullanici && kullanici.name === "Alice") {
        console.log("Merhaba Alice!");
    } else {
        console.log("Kullanıcı bulunamadı veya adı Alice değil.");
    }
    

  • || için: Eğer ilk koşul true ise, ikinci koşulun değeri ne olursa olsun tüm ifade true olacağından, JavaScript ikinci koşulu kontrol etmez.
    CODE
    12345678910111213
    let varsayilanIsim = "Misafir";
    let kullaniciIsmi = ""; // Boş string falsy bir değerdir.
    
    // kullaniciIsmi falsy (boş string) olduğu için, varsayilanIsim değeri atanır.
    let gosterilecekIsim = kullaniciIsmi || varsayilanIsim;
    console.log(gosterilecekIsim); // Çıktı: Misafir
    
    let gercekIsim = "Ayşe";
    // gercekIsim truthy olduğu için, gosterilecekIsim'e doğrudan gercekIsim atanır,
    // varsayilanIsim'e bakılmaz.
    let gosterilecekIsim2 = gercekIsim || varsayilanIsim;
    console.log(gosterilecekIsim2); // Çıktı: Ayşe
    

Bu kısa devre mekanizması, hem performans açısından faydalıdır hem de özellikle potansiyel null veya undefined değerleri kontrol ederken hata oluşmasını engellemek için yaygın olarak kullanılır.

Koşullu (Ternary) Operatör (? :)

Basit if-else durumları için, JavaScript'in koşullu (ternary) operatörü daha kısa ve öz bir sentaks sunar. Özellikle bir değişkene koşullu olarak bir değer atamak istediğinizde çok kullanışlıdır.

CODE
1234
let yas = 20;
let mesaj = (yas >= 18) ? "Reşitsiniz." : "Reşit değilsiniz.";
console.log(mesaj); // Çıktı: Reşitsiniz.


Yapı şu şekildedir: koşul ? doğruysa_değer : yanlışsa_değer. Kodun tek bir satırda okunabilmesini sağladığı için tercih edilebilir, ancak karmaşık mantıklar için okunabilirliği düşürebilir. Bu nedenle, sadece basit atamalar veya dönüş değerleri için kullanmak genellikle daha iyidir.

Yaygın Hatalar ve En İyi Uygulamalar

Karar yapılarını kullanırken dikkat edilmesi gereken bazı noktalar var:

  • Tek Eşittir (=) Yerine Çift/Üç Eşittir (==/===): En sık yapılan hatalardan biri, koşul içinde atama operatörü (=) kullanmaktır. Bu, koşulu her zaman true döndürebilir (atamanın sonucu truthy ise) ve beklenmedik davranışlara yol açar. Her zaman karşılaştırma operatörleri (== veya ===) kullanın. === (katı eşitlik) hem değer hem de tip kontrolü yaptığı için genellikle =='den (gevşek eşitlik) daha güvenlidir ve tercih edilmelidir.
    CODE
    12345678
    let x = 5;
    if (x = 10) { // HATA! x'e 10 atanır ve koşul true olur.
        console.log("x 10'a eşit sanıldı ama aslında atama yapıldı!");
    }
    if (x === 10) { // DOĞRU KULLANIM
        console.log("x gerçekten 10'a eşit.");
    }
    

  • Noktalı Virgül Tuzağı: if koşulundan hemen sonra noktalı virgül koymak, bloğun boş olmasına neden olur.
    CODE
    1234
    if (true); { // HATA! if bloğu boş, süslü parantezler her zaman çalışır
        console.log("Bu mesaj her zaman görünür.");
    }
    

  • Truthiness ve Falsiness: JavaScript'te bazı değerler Boolean olmasa da true veya false gibi değerlendirilir.
    • Falsy değerler: false, 0, "" (boş string), null, undefined, NaN.
    • Truthy değerler: Yukarıdakiler dışındaki her şey (örneğin, boş diziler [], boş objeler {} bile truthy'dir).
    Bunu anlamak, koşullu ifadelerde beklenmedik davranışlardan kaçınmanıza yardımcı olur.
    CODE
    1234567
    let kullaniciAdi = ""; // Falsy
    if (kullaniciAdi) {
        console.log("Kullanıcı adı var.");
    } else {
        console.log("Kullanıcı adı boş."); // Bu çalışır
    }
    

  • Erken Çıkış (Early Exit): Karmaşık iç içe if blokları yerine, bir koşul karşılanmadığında fonksiyondan erken dönmek (return) kodu daha okunaklı yapabilir.
    CODE
    12345678910
    function kullaniciVerileriniGetir(kullaniciId) {
        if (!kullaniciId) {
            console.log("Kullanıcı ID'si eksik.");
            return null; // Erken çıkış
        }
        // Diğer kontroller ve veri çekme işlemleri...
        console.log("Kullanıcı verileri getirildi.");
        return { id: kullaniciId, ad: "Test Kullanıcı" };
    }
    

JavaScript'te karar yapıları, kodunuzun akışını kontrol etmenin ve onu daha dinamik hale getirmenin temelidir. if, else if, else, mantıksal operatörler ve ternary operatör gibi araçları doğru ve etkin bir şekilde kullanmak, temiz, okunabilir ve bakımı kolay kod yazmanın anahtarıdır.

Sizler bu karar yapılarını günlük projelerinizde nasıl kullanıyorsunuz? Özellikle dikkat ettiğiniz "en iyi uygulamalar" veya karşılaştığınız ilginç durumlar var mı? Karmaşık koşulları yönetirken hangi yaklaşımları tercih ediyorsunuz? Yorumlarınızı ve deneyimlerinizi merak ediyorum...

Cavab vermək üçün daxil olmalısınız.

0 sitat seçildi