Condition — dastur bajarilish yo‘lini yoki amal davom etishini belgilash uchun rost yoki yolg‘on sifatida baholanadigan mantiqiy ifodadir. U if, loop, assertion, filter va synchronizationda ishlatiladi. Condition operandlar, taqqoslash va Boolean operatorlardan tuziladi; uning semanticsi tilning type hamda evaluation qoidalariga bog‘liq.
Boolean ifoda
Taqqoslash ==, <, >= kabi operator bilan qiymatlar orasidagi munosabatni tekshiradi. AND barcha qism rost, OR kamida bittasi rost, NOT natijani inkor qiladi. Parenthesis operator precedence’ni aniq ko‘rsatadi.
Ba’zi tillar faqat Boolean qiymatni qabul qiladi, boshqalari nol, bo‘sh satr yoki nullni falsy deb talqin qiladi. Implicit truthiness qisqa kod beradi, ammo 0 qonuniy qiymat bo‘lgan holatda xatoga olib kelishi mumkin.
Short-circuit evaluation
A && B ifodasida A yolg‘on bo‘lsa B baholanmaydi. A || Bda A rost bo‘lsa ikkinchi qism kerak emas. Bu nafaqat optimization, balki null checkdan keyin property o‘qish kabi xavfsizlik vositasidir.
Condition ichida side effect bo‘lsa short-circuit sabab ayrim funksiya chaqirilmasligi mumkin. Assignment, counter update yoki I/Oni conditionga joylash kodni qiyinlashtiradi. Predicate imkon qadar pure bo‘lishi maqsadga muvofiq.
Floating-point va null
Floating-point qiymatni aniq tenglik bilan tekshirish rounding sabab kutilmagan natija beradi. Muammoga mos tolerance yoki interval ishlatiladi. NaN odatiy tenglik qoidalariga bo‘ysunmaydi; hatto o‘ziga teng emas.
SQL uch qiymatli mantiqda NULL bilan taqqoslash UNKNOWN beradi. WHERE faqat TRUE qatorlarni oladi. column = NULL o‘rniga IS NULL ishlatiladi. Turli tizimdagi Boolean mantiqni aralashtirish muhim semantik farq yaratadi.
Murakkab shartlar
Ko‘p AND va ORli ifoda named predicate yoki yordamchi funksiyalarga ajratiladi. De Morgan qonunlari inkorni soddalashtiradi. Guard clause noto‘g‘ri holatni erta qaytarib, chuqur nested iflarni kamaytiradi.
Decision table bir nechta condition kombinatsiyasiga mos harakatni ko‘rsatadi. Har kombinatsiya test qilinmasa, kam uchraydigan yo‘l unutilishi mumkin. Modified condition/decision coverage safety-critical dasturda har condition natijaga mustaqil ta’sirini tekshiradi.
Race condition bilan farqi
Oddiy condition Boolean qaror, race condition esa concurrent operatsiyalar timingiga bog‘liq xatodir. “Holatni tekshir, keyin ishlat” ketma-ketligi boshqa thread o‘rtada state’ni o‘zgartirsa TOCTOU muammosi bo‘ladi. Tekshiruv va amal atomic lock yoki transactional primitive ichida bajariladi.
Xavfsizlik
Authorization condition default-deny asosida yoziladi. Murakkab inkorlar privilege bypassga olib kelishi mumkin. Security testlar anonymous, oddiy foydalanuvchi, owner va administrator holatlarini qamrab oladi. Input validation conditioni faqat clientda emas, ishonchli server chegarasida ham bajariladi.
Mantiqiy ifodalarni loyihalash
Murakkab shartlarni nomlangan oraliq predikatlarga ajratish ma’noni ravshanlashtiradi. Short-circuit baholashda and ning chap tomoni yolg‘on yoki or ning chap tomoni rost bo‘lsa, o‘ng tomon bajarilmaydi; null tekshiruvi bilan xavfli murojaatni ketma-ket joylash shunga tayanishi mumkin. Biroq yon ta’sirli funksiya chaqirig‘ini shart ichiga yashirish kodni tushunishni qiyinlashtiradi. Qaror jadvali bir nechta mustaqil omil kombinatsiyalarini qamrab olishga yordam beradi. Testlarda har bir alohida atomik shartning rost va yolg‘on holati, shuningdek chegara qiymatlari tekshiriladi.
Shartning ma’nosi vaqt bilan o‘zgarsa, biznes qoidasi versiyalanadi va qaror sababi jurnalga yoziladi. Bu murakkab ruxsat yoki narxlash natijasini keyin izohlashga yordam beradi.
Bog‘liq tushunchalar
Boolean logic, Predicate, Short-circuit evaluation, Decision table, Guard clause, Race condition