Dart If - Shart operatori

Hayotimiz davomida juda ko’p harakatlarni aynan biror-bir shartga asosan o’zimiz bilgan yoki bilmagan holatda bajarib kelamiz. Masalan, yo’ldan o’tayotganimizda svetafor chiroqlari biz uchun ayrim qoidalarni belgilaydi. Qizil to’xtab kutib turishimiz, sariq ogohlantirish tayyor turish, yashil esa harakatlanish uchun mumkinligini anglatadi. Yoki o’quv muassasalarida qo’ng’iroq chalinishi darsning boshlanish hamda tugash vaqtini belgilaydi. Bunday misollar juda ko’plab topiladi. Dasturlashda ham bu kabi holatlar inobatga olib ketilganligi bois biz bularni tarmoqlanish deb ham ataymiz.

Har bir shart asosida qaysidir bir jarayon bajarilishi yotadi. Boshqa dasturlash tillarida bo’lgani kabi Dart dasturlash tilida ham bu uchun if-else instruksiyasidan foydalaniladi.

if (shart) {
// kod
} else {
// kod
}

If dan so’ng qavslar ichida kerakli shart beriladi va jingalak qavslar orqali uning tana qismi ochilib, ichida kerakli ifodalar yoziladi. Agarda biz yozgan ifodalar soni bittadan oshmasa, jingalak qavslarni yozmaslik ham mumkin, aks holda bir nechta ifoda yozib qo’yilsa, faqatgina birinchi ifodaning o’zigina if tana qismiga tegishli bo’ladi. Qolganlari esa undan tashqarida bo’ladi. Keyin doimo tana qismi ichidagi ifodalarni biroz o’ngga surib, yozib ketganingiz ma’qul.

Yodda tuting! Jingalak qavslar ichida bir yoki undan ortiq ifodalarni yozib, ko’rsatib keta olishimiz mumkin.

Agarda doimo shartda faqat bitta holat inobatga olinishi kerak bo’lsa, if ning o’zi qo’llaniladi va bu qisman tarmoqlanish deyiladi hamda qachonki shart to’g’ri bo’lsa, ya’ni true qiymatga teng bo’lganda if tana qismi bajariladi. Quyidagi misolda biz sonning musbatligi tekshirmoqdamiz.

void main() {
int butun_son = 4;
if (butun_son > 0) {
print("$butun_son - musbat butun son");
}
}
>> 4 – musbat butun son

Faqatgina if ning o’zi emas, balki else aks holda qismi ham ishtirok etadigan bo’lsa, bunda to’liq tarmoqlanish deb ataladi. Yuqoridagi misolning else qismini yozadigan bo’lsak, agarda son musbat son bo’lish shartiga mos tushmay qolgandagina ishga tushadi. Bunda shart qiymati false ga teng bo’ladi.

void main() {
var butun_son = -3;
if (butun_son > 0) {
print("$butun_son musbat butun son");
} else {
print("$butun_son manfiy butun son");
}
}
>> 4 – manfiy butun son

Shart bloki bir nechta bo’lishi kerak bo’lsa, unda if o’rniga else if dan foydalanamiz. Ya’ni qo’shimcha boshqa shartlarga tekshirganimizda aynan ular uchun boshqa natija yoki jarayon taqdim etishimiz uchun kerak bo’ladi va bu esa murakkab tarmoqlanish deyiladi. Buning uchun svetafor misolini ko’rib o’taylik:

void main() {
var rang = "qizil";

if (rang == "yashil") {
print("Yo'ldan o'tishingiz mumkin");
} else if (rang == "sariq") {
print("Iltimos kuting va tayyor turing");
} else {
print("Kutib turing yashil yonishini");
}
}
>> Kutib turing yashil yonishini

Shartlarda svetafor rangi qaysi biriga tengligi tekshiriladi va shunga mos natija chiqadi. Agarda boshida shartlarning biriga mos tushib qolsa, bunday sharoitda keyingi holatlar ko’rib o’tilmaydi.

void main() {
var rang = "sariq";
var natija;

if (rang == "yashil") {
natija = "Yo'ldan o'tishingiz mumkin";
} else if (rang == "sariq") {
natija = "Iltimos kuting va tayyor turing";
} else {
natija = "Kutib turing yashil yonishini";
}
print(natija);
}
>> Iltimos kuting va tayyor turing

else if qismidagi shart bajarilayotgani uchun ham mana shu joydagi ifoda bajarilmoqda hamda undan keyingi else qismi ko’rilmasdan if-else instruksiyasi yakunlamoqda.

If-else instruksiyasining bir qatorlik shakldagi yoziluvchi shakli ham mavjud bo’lib, uni Ternor operatori yoki Uchlik operatori deb ham atashimiz mumkin. Uning sintaksisi :

o’zgaruvchi = (shart) ? if : else;

Berilgan shart rost bo’lganda so’roqdan keyingi qism, aks holda esa ikki nuqtadan keyingi qismi bajariladi. Shuning uchun ham if va else yozib qo’yilgan. Erishilgan natija qiymatini esa biror o’zgaruvchiga o’zlashtirib olib foydalanishimiz yoki murakkab ifodalarda qo’llashimiz mumkin. Keyin shartni qavslar ichida yozmasligimiz mumkin, lekin shart ifodasi katta bo’lib ketsa berilgani ma’qul yoki doimo yozishga odatlaning. Yana shuni aytib ketish kerakki, bu operator 3 ta operand va 2 ta operatordan tashkil topgan.

Masalan :

  1. Oddiy holatida ko’raylik ya’ni berilgan son juft bo’lsa, uni toq son, aks holda juft son shakliga o’tkazaylik.
void main() {
var son = 2;
var natija = (son % 2 == 1) ? son + 1 : son + 3;
print(natija);
}
>> 5

Birinchi ifodada son nomli o’zgaruvchi berilgan va uning qiymati 2 ga teng. Undan keyingi ifodada son o’zgaruvchisining shartda juft yoki toq sonligi tekshirib otilmoqda. Ishlashi juft sonlar matematikada 2n va toq sonlar esa 2n±1 tarzida ifodalanadi. 2 bo’lganda qoldiq 0 bo’lsa bu juft son, aks holda esa toq son hisoblanishi inobatga olib o’tilgan. Hozir bu yerda qiymat toq son bo’lganligi uchun natija o’zgaruvchisi qiymati 2 + 3 = 5 ga teng bo’ladi.

  1. Endi murakkabroq ifodada ko’rib o’tsak,
void main() {
var son = 2;
var natija = 20 + [4, 5][son == 2.0 ? 1 : 0];
print(natija);
}
>> 25

Bu ifodada birinchi Ternor operatori bajariladi. son == 2.0 ? 1 : 0 qismida natija 2 qiymati 2.0 ga tengligi bois 1 natijasi olinadi. Hamda ro’yxatning 2-elementiga murojaat qilinadi. U esa 5 ga teng va ifoda so’nggida natija o’zgaruvchisi o’ziga 20 + 5 = 25 qiymatini o’zlashtirib oladi. So’nggi natija sifatida ekranga 25 qiymati chiqariladi.