25 август 2025

Shartli operatorlar: if, '?'

Ba’zan, biz har xil sharoitlarda har xil harakatlarni bajarishimiz kerak.

Buning uchun if ifodasidan va “savol belgisi” operatori deb yuritiladigan uchlik operatoridan soddalik uchun foydalanamiz ?.

“If” ifodasi

If ifodasi shartni baholaydi va agar natijaning natijasi true bo’lsa, kod blokini bajaradi.

Masalan:

let year = prompt('ECMAScript-2015 spetsifikatsiyasi qaysi yilda nashr etilgan??', '');

if (year == 2015) alert( 'Siz haqsiz!' );

Yuqoridagi misolda shart oddiy tenglikni tekshirish (yil == 2015), ammo u ancha murakkab bo’lishi mumkin.

Agar biz bir nechta ifodalarni bajarishni istasak, kod blokimizni jingalak qavs ichiga o’rashimiz kerak:

if (year == 2015) {
  alert("Bu to'g'ri!");
  alert("Siz juda aqllisiz!");
}

Kod blokingizni jingalak qo’shtirnoq bilan o’rashni tavsiya etamiz {} har safar if ifodadan foydalansangizda, bajarish uchun bitta ifoda bo’lsa ham. Bunday qilish,kodning o’qilishini yaxshilaydi.

Mantiqiy malumot turiga konvertatsiya

If(...) ifodasi uning qavsidagi ifodani baholaydi va natijani mantiqiy holatga o’tkazadi.

"type-convertions" maqolasi topilmadi bobidagi konvertatsiya qoidalarini eslaylik:

  • 0 raqami, bo’sh satr "",null, undefined va NaN barchasi false bo’ladi. Shu sababli ularni “soxta” qiymatlar deb atashadi.
  • Boshqa qiymatlar true bo’ladi, shuning uchun ular “aniq” deb nomlanadi.

Shunday qilib, ushbu shartdagi kod hech qachon bajarilmaydi:

if (0) { // 0 bu soxta
  ...
}

…va bu shart ichida – bu har doim to’g’ri bo’ladi:

if (1) { // 1 bu to'g'ri
  ...
}

Bundan tashqari, oldindan baholangan mantiqiy qiymatni if ga kiritishingiz mumkin, masalan:

let cond = (year == 2015); // tenglik rost yoki yolg'on qiymatini baholaydi

if (cond) {
  ...
}

“Else” ifodasi

If ifodasi ixtiyoriy else blokini o’z ichiga olishi mumkin. U shart noto’g’ri bo’lganida amalga oshiriladi.

Masalan:

let year = prompt(
  "ECMAScript-2015 spetsifikatsiyasi qaysi yilda nashr etilgan?",
  ""
);

if (year == 2015) {
  alert("Siz buni to'g'ri taxmin qildingiz!");
} else {
  alert("Qanday qilib shunday noto'g'ri bo'lishi mumkin?"); // 2015 yildan tashqari har qanday qiymat
}

Bir nechta shartlar: “else if”

Sometimes, we’d like to test several variants of a condition. The else if clause lets us do that. Ba’zan, biz shartning bir nechta variantlarini sinab ko’rmoqchi bolamiz. Else if ifodasi bunga imkon beradi.

Masalan:

let year = prompt(
  "ECMAScript-2015 spetsifikatsiyasi qaysi yilda nashr etilgan?",
  ""
);

if (year < 2015) {
  alert("Juda erta...");
} else if (year > 2015) {
  alert("Juda kech");
} else {
  alert("Aynan!");
}

Yuqoridagi kodda JavaScript avval year < 2015 ni tekshiradi. Agar bu noto’g’ri bo’lsa, u keyingi year > 2015 shartiga o’tadi. Agar bu ham noto’g’ri bo’lsa, u oxirgi alert ni ko’rsatadi.

Ko’proq else if bloklari bo’lishi mumkin. Oxirgi else ixtiyoriy.

<<<<<<< HEAD

Uchlik operator ‘?’

=======

Conditional operator ‘?’

fb4fc33a2234445808100ddc9f5e4dcec8b3d24c

Ba’zan, biz shartga qarab o’zgaruvchani tayinlashimiz kerak.

Masalan:

let accessAllowed;
let age = prompt('Yoshingiz nechida?', '');

if (age > 18) {
  accessAllowed = true;
} else {
  accessAllowed = false;
}

alert(accessAllowed);

<<<<<<< HEAD “Uchlik” yoki “savol belgisi” deb nomlangan operator bizga buni qisqa va sodda qilib bajarishga imkon beradi.

Operator ? savol belgisi bilan ifodalanadi. “Uchlik” rasmiy atamasi operatorda uchta operand borligini anglatadi. Bu aslida JavaScript-da juda ko’p operandli bitta va yagona operator.

The so-called “conditional” or “question mark” operator lets us do that in a shorter and simpler way.

The operator is represented by a question mark ?. Sometimes it’s called “ternary”, because the operator has three operands. It is actually the one and only operator in JavaScript which has that many.

fb4fc33a2234445808100ddc9f5e4dcec8b3d24c

Sintaksis:

let result = shart ? qiymat1 : qiymat2;

Shart baholanadi: agar u to’g’ri bo’lsa, u holda qiymat1 qaytariladi, aks holda – qiymat2.

Masalan:

let accessAllowed = age > 18 ? true : false;

<<<<<<< HEAD Texnik jihatdan age > 18 atrofidagi qavslarni tashlab qo’yishimiz mumkin. Savol belgisi operatori past ustunlikka ega, shuning uchun u > taqqoslashidan so’ng amalga oshiriladi.

Technically, we can omit the parentheses around age > 18. The question mark operator has a low precedence, so it executes after the comparison >.

fb4fc33a2234445808100ddc9f5e4dcec8b3d24c

Ushbu misol avvalgisiga o’xshash narsani bajaradi:

// taqqoslash operatori "age > 18" baribir birinchi bo'lib bajariladi
// (uni qavs ichiga o‘rab olishning hojati yo‘q)
let accessAllowed = age > 18 ? true : false;

Ammo qavslar kodning o’qilishini yanada oson qiladi, shuning uchun ulardan foydalanishni tavsiya etamiz.

Esda tuting:

Yuqoridagi misolda siz savol belgisi operatorini foydalanishdan saqlanishingiz mumkin, chunki taqqoslash o’zi true/false ni qaytaradi:

// xuddi shu
let accessAllowed = age > 18;

Bir nechta ‘?’

Savol belgi operatorlari ketma-ketligi ? bir nechta shartlarga bog’liq bo’lgan qiymatni qaytarishi mumkin.

Masalan:

let age = prompt("age?", 18);

let message =
  age < 3
    ? "Salom bolakay!"
    : age < 18
    ? "Salom!"
    : age < 100
    ? "Assalomu aleykum!"
    : "Qanday g'ayrioddiy yosh!";

alert(message);

Avvaliga nima bo’layotganini tushunish qiyin bo’lishi mumkin. Ammo yaqindan ko’rib chiqqach, bu oddiy testlar ketma-ketligi ekanligini ko’rishimiz mumkin:

  1. Birinchi savol belgisi age < 3 ni tekshiradi.
  2. Agar rost bo’lsa – u qaytadi 'Salom bolakay!'. Aks holda, u yo’g’on ichakdan ‘“:”’ keyingi ifodaga davom etadi, age < 18 ni tekshirishadi.
  3. Agar shu rost bo’lsa – u qaytadi 'Salom!'. Aks holda, u yo’g’on ichakdan ‘“:”’ keyingi ifodaga davom etadi, age < 100 ni tekshirishadi.
  4. Agar shu rost bo’lsa – u qaytadi 'Assalomu aleykum!'. Aks holda, u yo’g’on ichakdan ‘“:”’ ohirgi ifodaga davom etadi, Qanday g'ayrioddiy yosh! ni qaytaradi.

Bu if..else yordamida qanday ko’rinishga ega:

if (age < 3) {
  message = "Salom bolakay!";
} else if (age < 18) {
  message = "Salom!";
} else if (age < 100) {
  message = "Assalomu aleykum!";
} else {
  message = "Qanday g'ayrioddiy yosh!";
}

“?” dan noan’anaviy foydalanish

Ba’zan ? savol belgisi if o’rnini bosuvchi sifatida ishlatiladi:

let company = prompt('JavaScript-ni qaysi kompaniya yaratgan?', '');

(company == 'Netscape') ?
   alert("To'g'ri!") : alert("Noto'g'ri!");

Company == 'Netscape' shartiga qarab, ? dan keyin birinchi yoki ikkinchi ifoda bajariladi va ogohlantirish ko’rsatiladi.

Biz bu yerda o’zgaruvchanga natija bermaymiz. Buning o’rniga, biz shartga qarab turli xil kodlarni bajaramiz.

<<<<<<< HEAD Savol belgisi operatoridan shu tarzda foydalanishni tavsiya etmaymiz.

It’s not recommended to use the question mark operator in this way.

fb4fc33a2234445808100ddc9f5e4dcec8b3d24c

Yozuv ba’zi dasturchilarga yoqadigan if ekvivalentidan qisqa. Ammo uning o’qilishi qiyin.

Taqqoslash uchun if dan foydalanilgan usha kod:

let company = prompt('JavaScript-ni qaysi kompaniya yaratgan?', '');

if (company == 'Netscape') {
  alert("To'g'ri!");
} else {
  alert("Noto'g'ri!");
}

Bizning ko’zlarimiz kodni vertikal ravishda skanerlaydi. Bir nechta satrlarni qamrab oladigan kod bloklarini uzoq, lekin gorizontal ko’rsatmalar to’plamidan ko’ra tushunishga osonroq bo’lishi mumkin.

? Savol belgisi operatorining maqsadi uning shartiga qarab u yoki bu qiymatni qaytarishdir. Iltimos, faqat shu maqsad uchun foydalaning. Kodning turli tarmoqlarini bajarish kerak bo’lganda if dan foydalaning.

Vazifalar

alert ko’rsatiladimi?

if ("0") {
  alert("Salom");
}

Ha, shunday bo’ladi.

Bo’sh satrdan tashqari har qanday satr (va "0" bo’sh emas) mantiqiy kontekstda true bo’ladi.

Biz ishlatish va tekshirishimiz mumkin:

if ("0") {
  alert("Salom");
}

“If…else” konstruktsiyasidan foydalanib, quyidagi kodni yozing: ‘JavaScript-ning “rasmiy” nomi nima?’

Agar foydalanuvchi “ECMAScript” ni kiritsa, u holda “To’g’ri!”, Aks holda: “Bilmadizmi? ECMAScript!” ni chiqarsin.

Yangi oynada namoyish

<!DOCTYPE html>
<html>
  <body>
    <script>
      "use strict";

      let value = prompt('JavaScript-ning "rasmiy" nomi nima?', "");

      if (value == "ECMAScript") {
        alert(`To'g'ri!`);
      } else {
        alert("Bilmaysizmi? ECMAScript!");
      }
    </script>
  </body>
</html>
muhimlik: 2

If..else konstruksiyasidan foydalanib prompt orqali raqamni kiriting va alert orqali uni ekranda ko’rsating:

  • 1, agar qiymat noldan katta bo’lsa,
  • -1, agar noldan kam bo’lsa,
  • 0, agar nolga teng bo’lsa.

Ushbu vazifada biz kiritishni har doim raqam deb hisoblaymiz.

Yangi oynada namoyish

let value = prompt("Raqam kiriting", 0);

if (value > 0) {
  alert(1);
} else if (value < 0) {
  alert(-1);
} else {
  alert(0);
}
muhimlik: 5

If ni ternariy operatori yordamida '?' qayta yozing:

let result;

if (a + b < 4) {
  result = "Quyida";
} else {
  result = "Ustida";
}
result = a + b < 4 ? "Quyida" : "Ustida";
muhimlik: 5

If ni bir nechta ternariy operator yordamida '?' qayta yozing.

Kod oson o’qilish uchun biz kodning bir nechta satrlarga bo’lisni tavsiya etamiz.

let message;

if (login == "Xodim") {
  message = "Salom";
} else if (login == "Direktor") {
  message = "Assalomu aleykum";
} else if (login == "") {
  message = "Kirish yo'q";
} else {
  message = "";
}
let message =
  login == "Xodim"
    ? "Salom"
    : login == "Direktor"
    ? "Assalomu aleykum"
    : login == ""
    ? "Kirish yo'q"
    : "";
O'quv qo'llanma xaritasi

Izohlar

izoh berishdan oldin buni o'qing…
  • Agar sizda nimani yaxshilash kerakligi haqida takliflaringiz bo'lsa - iltimos, GitHub muammosini yuboring yoki izoh berish o'rniga so'rov yuboring.
  • Agar siz maqolada biror narsani tushunolmasangiz - iltimos, batafsilroq ma'lumot bering.
  • Bir nechta so'z so'zlarini kiritish uchun <code> yorlig'ini ishlating, bir nechta satrlar uchun - ularni <pre> yorlig'i bilan o'rab qo'ying, 10 satrdan ortiq bo'lsa - sandbox (plnkr, jsbin, codepen…)