Shartlar — if/else, switch, ternary
Muammodan boshlaylik
Dastur har doim bir yo'nalishda ketmaydi. Foydalanuvchi tizimga kirganmi? Mahsulot omborda bormi? Yosh 18 dan kattami? Bu savollarga qarab dastur turli yo'l tutadi.
Shartlar — dasturga "agar shunday bo'lsa, shuni qil; aks holda, buni qil" deb aytish usuli. Bu dasturlashning eng asosiy qismi — shartsiz dastur yozib bo'lmaydi.
if / else — asosiy qurilma
if — "agar" degani. Shart true bo'lsa — blok bajariladi, false bo'lsa — o'tkazib yuboriladi.
const yosh = 20;
if (yosh >= 18) {
console.log("Katta yoshli"); // ← yosh 18 dan katta, shu bajariladi
}
else — "aks holda" degani. Shart false bo'lganda bajariladi:
const yosh = 15;
if (yosh >= 18) {
console.log("Katta yoshli");
} else {
console.log("Voyaga yetmagan"); // ← bu bajariladi
}
else if — bir nechta shart tekshirishda:
const ball = 75;
if (ball >= 90) {
console.log("A'lo");
} else if (ball >= 70) {
console.log("Yaxshi"); // ← bu bajariladi
} else if (ball >= 50) {
console.log("Qoniqarli");
} else {
console.log("Qoniqarsiz");
}
Shartlar yuqoridan pastga tekshiriladi. Birinchi true bo'lgan blok bajariladi, qolganlar o'tkazib yuboriladi.
Hayotiy o'xshatma
Tasavvur qiling: metro turnstiketi. Karta qo'ysangiz — pul yetarlimi tekshiradi. Yetarli bo'lsa — eshik ochiladi. Yetarli bo'lmasa — "Balans yetarli emas" deydi. Pul umuman bo'lmasa — "Karta topilmadi" deydi.
Bu aynan if / else if / else — har bir holat uchun alohida yo'l.
Nima uchun shunday?
Nima uchun {} qavslar kerak?
Texnik jihatdan bitta satr uchun qavslar shart emas:
if (yosh >= 18) console.log("Katta"); // ishlaydi
Lekin bu xavfli:
if (yosh >= 18)
console.log("Katta");
console.log("Tizimga kirish mumkin"); // ← bu DOIM bajariladi, shartga bog'liq emas!
Ikkinchi console.log shart ichida ko'rinsa ham — aslida tashqarida. Har doim {} ishlatiladi — xatolardan himoya qiladi.
Truthy va Falsy
if ichidagi shart har qanday qiymat bo'lishi mumkin — faqat true/false emas. JavaScript qiymatni boolean ga aylantiradi:
Falsy qiymatlar (false deb hisoblanadi):
if (0) { } // bajarilmaydi
if ("") { } // bajarilmaydi
if (null) { } // bajarilmaydi
if (undefined) { } // bajarilmaydi
if (NaN) { } // bajarilmaydi
if (false) { } // bajarilmaydi
Truthy qiymatlar (true deb hisoblanadi — qolgan hamma narsa):
if (1) { } // bajariladi
if ("salom") { } // bajariladi
if ([]) { } // bajariladi — bo'sh massiv ham truthy!
if ({}) { } // bajariladi — bo'sh ob'ekt ham truthy!
switch — ko'p qiymat tekshirishda
Bitta o'zgaruvchini ko'p qiymat bilan taqqoslashda switch if/else if dan aniqroq ko'rinadi.
const kun = "Dushanba";
switch (kun) {
case "Dushanba":
case "Seshanba":
case "Chorshanba":
case "Payshanba":
case "Juma":
console.log("Ish kuni"); // ← bu bajariladi
break;
case "Shanba":
case "Yakshanba":
console.log("Dam olish kuni");
break;
default:
console.log("Noto'g'ri kun");
}
break nima uchun kerak?
break — shu case bajarilgandan keyin switch dan chiqish. break bo'lmasa — keyingi case ham bajariladi (fall-through):
const daraja = 2;
switch (daraja) {
case 1:
console.log("Birinchi");
// break yo'q!
case 2:
console.log("Ikkinchi"); // ← bajariladi
// break yo'q!
case 3:
console.log("Uchinchi"); // ← bu ham bajariladi! daraja=2 bo'lsa ham
break;
case 4:
console.log("To'rtinchi"); // ← bu bajarilmaydi
}
// Natija: "Ikkinchi", "Uchinchi"
Bu ko'pincha xato — lekin ba'zan ataylab ishlatiladi (yuqoridagi "Dushanba-Juma" misoli).
switch qachon, if/else qachon?
switch — bitta o'zgaruvchini aniq qiymatlar bilan taqqoslashda qulay.
if/else — murakkab shartlarda, oraliq qiymatlar (>, <, >=) da kerak.
// switch uchun mos
switch (status) {
case "active": ...
case "inactive": ...
}
// if/else kerak — oraliq qiymat
if (temperature > 100) { ... }
else if (temperature > 37) { ... }
Ternary operator — qisqa yozuv
Ternary — uchta qismdan iborat: shart ? true_holat : false_holat.
const yosh = 20;
const holat = yosh >= 18 ? "Katta" : "Kichik";
console.log(holat); // "Katta"
Bu quyidagiga teng:
let holat;
if (yosh >= 18) {
holat = "Katta";
} else {
holat = "Kichik";
}
Ternary — qiymat qaytarish uchun. Qisqa, bir qatorda yoziladi.
Qachon ternary, qachon if/else?
// ✅ Ternary mos — oddiy qiymat tayinlash
const label = isAdmin ? "Admin" : "Foydalanuvchi";
// ✅ JSX da qulay
<div>{isLoggedIn ? <Dashboard /> : <Login />}</div>
// ❌ Ternary noto'g'ri — murakkab mantiq
const result = a > b
? (a > c ? doSomethingComplex() : doAnotherThing())
: (b > c ? yetAnotherThing() : lastThing());
// Bu o'qib bo'lmaydi — if/else yaxshiroq
Ternary ichida ternary — o'qish qiyinlashadi. Bunday holda if/else ishlatiladi.
Short-circuit evaluation — qisqa tutashuv
&& va || operatorlari shartli bajarish uchun ham ishlatiladi:
// && — birinchi shart true bo'lsa, ikkinchisi bajariladi
isLoggedIn && showDashboard();
// || — birinchi shart false bo'lsa, ikkinchisi bajariladi
const name = inputName || "Mehmon";
Bu ternary ning yanada qisqa shakli — lekin faqat oddiy holatlarda o'qilishi oson.
Tez-tez uchraydigan xatolar
= o'rniga == yoki === yozish:
if (x = 5) { ... } // ❌ bu tayinlash! x ga 5 yoziladi, shart doim true
if (x === 5) { ... } // ✅
break unutish:
switch (role) {
case "admin":
grantAdminAccess();
// break yo'q!
case "user":
grantUserAccess(); // ← admin uchun ham bajariladi!
}
Bo'sh massivni false deb hisoblash:
const items = [];
if (!items) {
console.log("Bo'sh"); // ❌ ishlamaydi — [] truthy
}
if (items.length === 0) {
console.log("Bo'sh"); // ✅
}
Haddan ko'p else if — switch yaxshiroq:
// ❌ o'qish qiyin
if (color === "red") { ... }
else if (color === "green") { ... }
else if (color === "blue") { ... }
else if (color === "yellow") { ... }
// ✅ aniqroq
switch (color) {
case "red": ...
case "green": ...
case "blue": ...
case "yellow": ...
}
Xulosa
if/else — asosiy shartli qurilma. Murakkab shartlar, oraliq qiymatlar uchun.
switch — bitta o'zgaruvchini ko'p aniq qiymat bilan taqqoslashda. break unutilmaydi.
Ternary ? : — qisqa qiymat tayinlash uchun. Murakkab mantiqda if/else yaxshiroq.
Falsy qiymatlar: 0, "", null, undefined, NaN, false. Qolgan hamma narsa — truthy. Bo'sh massiv [] va ob'ekt {} — truthy.
Keyingi dars
7-dars: Sikllar — for, while, do-while, for...of, for...in