Ternary operatorlari vs if-else bayonotlari

Ehtimol siz oldin manbali faylda yoki boshqa joyda uchinchi darajali operatorni (shartli ifoda sifatida ham tanilgan) ko'rgansiz. C va shunga o'xshash sintaksisi bo'lgan juda ko'p tilda biz? ushbu operatorni ifodalash uchun belgi.

Aksariyat boshlanuvchilar (o'z tajribam bo'yicha) ushbu operatorni tushunish biroz qiyin, garchi ular if va boshqa gaplarni allaqachon o'zlashtirgan bo'lsalar ham. Buning sababi shundaki, uni o'qish va yozish biroz qiyin, chunki bitta satrda turli xil operatsiyalarni bajarish chalkash bo'lishi mumkin. Haqiqatan ham.

Ehtimol, siz ulardan qanday foydalanishni yoki hech bo'lmaganda, ularning mantig'ini qanday o'qishni va tushunishni bilasiz. Agar bilmasangiz, ehtimol sizga men bolalar uchun yaratgan ASCIIning quyidagi "chiroyli" rasmlari sizga yordam berishi mumkin.

       ha
   __ __ __ __
  | |
  | |
  | ^
ahvoli? haqiqiy: noto'g'ri
  | ^
  | |
  | __ __ __ __ __ __ __ |
         yo'q

Uchinchi operator uchta dalilni oladi. Birinchisi (1-chi) - bu shart, ikkinchisi (2-chi) agar shart to'g'ri bo'lsa, uchinchi (3-chi) agar shart noto'g'ri bo'lsa, bajariladi.

Layman aytganda, bu bitta (1) qatorda faqat {if-else} gap!

Ulardan qachon foydalanish kerak?

Shaxsan men shartlarga qarab o'zgaruvchiga qiymat belgilashni xohlaganimda ulardan foydalanaman. Masalan, agar x == 42 bo'lsa, y o'zgaruvchisi to'g'ri bo'lishini istayman deylik. Agar x 42 ga teng bo'lmasa, u holda y o'zgaruvchining qiymati False bo'ladi.

Xo'sh, buni qanday yozaman? Xuddi shunday ...

bool y = (x == 42)? haqiqiy: noto'g'ri;

Oson! O'zingizni sinab ko'ring. Bundan tashqari, bu erda Python versiyasi, chunki:

y = "To'g'ri", agar x == 42 "Noto'g'ri" bo'lsa

Xo'sh, agar if-else so'zi qanday bo'lsa?

Bunday holda men bahslashaman va bunga qarshi chiqaman. Nima uchun? Ushbu kodni ko'rib chiqing:

bool y;
agar (x == 42) {
  y = haqiqiy;
}
else {
  y = noto'g'ri;
}

Uchinchi operatorga "tarjima qilish" uchun biz uni quyidagicha amalga oshiramiz:

? -> agar (x == 42) {}
y -> haqiqiy;
: -> else {}
y -> noto'g'ri;

Shunday qilib, biz uni bitta satrda bo'lishini xohlasak, shunga o'xshash narsaga ega bo'lishimiz mumkin:

bool y; if (x == 42) {y = true;} else {y = false;}

Qanday xunuk va keraksiz bo'lsa, chunki biz buni quyidagicha yozishimiz mumkin:

bool y = (x == 42)? haqiqiy: noto'g'ri;

Ko'rasizmi? Juda toza! Etti (7) kod satrlarini bitta (1) qatorga qisqartirdik. :)

Qachon undan qochishim kerak?

Terner operatorlari juda zo'r, ammo har doim ham kerak emas. Aytaylik, siz shunchaki biron bir funktsiyani bajarmoqchisiz yoki bir nechta operatsiyalarni bajarmoqchisiz ... uchliklardan foydalanmang.

Qaysi birini tanlaysiz?

agar (x == 42) {
  std :: cout << "kod bajarildi" << std :: endl;
  kod ();
}
else {
  std :: cout << "hech narsa bo'lmadi" << std :: endl;
}

va boshqalar

(x == 42)? ((std :: cout << "kod bajarildi" << std :: endl), code ()): (bekor) (std :: cout << "hech narsa bo'lmadi" << std :: endl);

Ha, endi buni tushunish oson.

Xulosa

  • O'zgaruvchiga qiymatni belgilash yoki kerak bo'lganda kodni kamaytirish uchun uchlamchi operatorlardan foydalaning.
  • Hamma narsa uchun if-else so'zlaridan foydalaning.