Her yararlı program eninde sonunda bir karar noktasına gelir. Bu buton formu mu göndermeli yoksa bir hata mı göstermeli? Bu kullanıcı yönetici panelini mi yoksa konuk görünümünü mü görmeli? JavaScript bu soruları koşullu ifadelerle yanıtlar. Bunlar kodunuzun kontrol vanalarıdır: bir yolu açar, diğerini kapatır; hepsi bir ifadenin true (doğru) veya false (yanlış) olarak değerlendirilmesine bağlıdır. Onlar olmasaydı, betiğiniz onu kullanan kişiye hiç tepki vermeden yukarıdan aşağıya doğru ilerleyip giderdi.

En Basit Dal: if

if ifadesi, ilk geçtiğiniz kapıdır. Parantez içine bir koşul yerleştirirsiniz. Eğer bu koşul true olarak sonuçlanırsa, altındaki kod bloğu çalıştırılır. Eğer false olarak sonuçlanırsa, JavaScript bloğu tamamen atlar ve dosyanın aşağısına devam eder.

Bu, basit ve tek seferlik kontroller için tam olarak ihtiyacınız olan şeydir. Sunucuya herhangi bir şey göndermeden önce bir form alanını doğruladığınızı hayal edin:

const email = document.getElementById("email").value;

if (email === "") {
  alert("Please enter your email.");
}

email yoksa, gönderim de yok. Mantık yalın ve nettir. Korunması gereken yalnızca tek bir özel durum olduğunda ve alternatif bir eylem gerekmediğinde if kullanın.

Ya O Ya Bu: if...else

Gerçek kararların çoğu iki taraflıdır. if...else ikilisi tam olarak bunu kapsar. Koşul doğru olduğunda bir blok, yanlış olduğunda ise diğeri çalışır. Bu iki yol birbirini dışlar.

Sayfa yüklenirken yapılan bir karanlık mod kontrolünü hayal edin:

const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;

if (prefersDark) {
  document.body.classList.add("dark");
} else {
  document.body.classList.add("light");
}

Tarayıcı asla her iki sınıfı birden eklemeyecektir. Bir yolu seçer, çalıştırır ve devam eder. Mantığınız net bir şekilde iki olası sonuca ayrıldığında, başvurmanız gereken yapı budur.

Çoklu Yollar: if...else if...else

Her problem ikili (binary) değildir. Bazen bir olasılıklar merdivenine ihtiyaç duyarsınız. if...else if...else zinciri, birkaç koşulu sırayla test etmenize olanak tanır. JavaScript bunları yukarıdan aşağıya değerlendirir ve koşulu doğru olan ilk bloğu çalıştırır. Bu eşleşmeden sonra merdivenin geri kalanı görmezden gelinir.

Klasik bir örnek, sayısal bir puanı harf notuna eşlemektir:

const score = 87;
let grade;

if (score >= 90) {
  grade = "A";
} else if (score >= 80) {
  grade = "B";
} else if (score >= 70) {
  grade = "C";
} else {
  grade = "F";
}

Burada sıra son derece önemlidir. Eğer score >= 90 kontrolünden önce score >= 70 kontrolünü yaparsanız, neredeyse tüm geçer notlar C kategorisinde takılıp kalır çünkü ilk doğru eşleşme kazanır. Koşullarınızı en spesifik olandan en az spesifik olana doğru sıralayın ve aradan kaçabilecek her şeyi yakalamak için zinciri her zaman son bir else ile bitirin.

Sabit Değerleri Eşleştirme: switch

Bir değişkeni bilinen sabitlerin listesiyle karşılaştırırken, uzun bir if...else zinciri karmaşaya yol açar. switch ifadesi işleri düzenler. Bir ifadeyi bir kez değerlendirir, ardından katı eşitlik (===) kullanarak case etiketleriyle karşılaştırır. Seçenekler ayrı ve isimlendirilmiş olduğunda bu, kodun taranmasını kolaylaştırır.

Güncel güne göre mağaza saatlerini ayarlamayı düşünün:

const day = new Date().getDay();

switch (day) {
  case 0:
    console.log("Sunday hours: 10am - 4pm");
    break;
  case 6:
    console.log("Saturday hours: 9am - 6pm");
    break;
  default:
    console.log("Weekday hours: 8am - 8pm");
}

break kullanımına dikkat edin. Eğer onu atlarsanız, yürütme bir sonraki case bloğuna geçer ve çalışmaya devam eder. Bu davranış bazen yararlı olsa da çoğu zaman sessiz hatalara (silent bugs) neden olur. Doğru kullanıldığında switch, niyetinizi bir bakışta açıkça ortaya koyar ve ilgili dalları düzenli bir sütun halinde hizalar.

Kompakt Kararlar: Ternary Operatörü

? : şeklinde yazılan ternary operatörü bir ifade (expression), bir deyim (statement) değildir. Bu ayrım önemlidir