Logical Operators
Ba'zan bitta shart yetarli emas. Kimdir yetarlicha katta YOKI chiptasi bor-yo'qligini, yoki u administrator YOKI egasi ekanligini tekshirish kerak bo'lishi mumkin.
Go shartlarni birlashtirish uchun uchta mantiqiy operator beradi:
| OPERATOR | MA'NOSI | MISOL |
|---|---|---|
&& | va, ikkalasi ham to'g'ri bo'lishi kerak | age >= 18 && hasTicket |
|| | yoki, kamida bittasi to'g'ri | isAdmin || isOwner |
! | emas, boolni teskarisiga aylantiradi | !ready |
if age >= 18 && hasID {
fmt.Println("Welcome")
}
if isAdmin || isOwner || isModerator {
fmt.Println("Access granted")
}
if !maintenance {
fmt.Println("System is up")
}Bitta ifodada bir nechta operatorni birlashtirish mumkin. Guruhlashni aniq ko'rsatish uchun qavslardan foydalaning:
if (age >= 18 && hasTicket) || isVIP {
fmt.Println("You're in")
}Qavslarsiz, && operatori || dan kuchliroq bog'lanadi (xuddi matematikada * ning + dan oldin bo'lishi kabi). Lekin shubhangiz bo'lsa, niyatingizni aniq ko'rsatish uchun qavs qo'shing.
Go shuningdek qisqa tutashuv (short-circuit) qiladi: agar && ning chap tomoni yolg'on bo'lsa, u o'ng tomonni butunlay o'tkazib yuboradi. Agar || ning chap tomoni to'g'ri bo'lsa, u o'ng tomonni o'tkazib yuboradi. Bu o'ng tomonda siz ishga tushirmoqchi bo'lmagan funksiya chaqiruvi bo'lganda muhim ahamiyatga ega.
Bool qiymatlar allaqachon bool
Agar sizda bool o'zgaruvchi bo'lsa, uni true bilan solishtirishingiz shart emas:
if cpuHigh == true { ... } // ishlaydi, lekin ortiqcha
if cpuHigh { ... } // xuddi shu narsa, idiomatik
if !cpuHigh { ... } // false ni tekshiradiQo'shimcha == true tekshiruvlari — bu ortiqcha yozish va o'zgaruvchi nomida xato qilish uchun ko'proq joy. Boolni to'g'ridan-to'g'ri ishlating.
Shartlarni natijalarga moslashtirish
Qoida bir nechta boolga bog'liq bo'lsa, har bir kombinatsiyani yozib chiqish foydali. Quyidagi mashq uchun uchta kirish (cpuHigh, memoryHigh, diskFull) 2 × 2 × 2 = 8 holatni beradi, va qoidalar ularni uchta natijaga jamlaydi:
| CPUHIGH | MEMORYHIGH | DISKFULL | NATIJA |
|---|---|---|---|
| true | true | any | CRITICAL |
| true | false | any | WARNING |
| false | true | any | WARNING |
| false | false | true | WARNING |
| false | false | false | OK |
Shunga o'xshash "istalgan qatorga mos kelsin" tuzilmasi to'g'ridan-to'g'ri if / else if / else ga mos tushadi.
>_ Exercise
Siz server monitoring ogohlantirish tizimini yaratyapsiz. Quyidagi qoidalarga asosan checkSystem ichidagi status o'zgaruvchisini yangilang:
Agar cpuHigh va memoryHigh ikkalasi ham true bo'lsa, status ni "CRITICAL" ga o'rnating.
Agar cpuHigh, memoryHigh, yoki diskFull dan kamida bittasi true bo'lsa, status ni "WARNING" ga o'rnating.
"CRITICAL" ni "WARNING" dan oldin tekshiring, chunki kritik holat ogohlantirish shartiga ham mos keladi.
Agar hech narsa noto'g'ri bo'lmasa, status "OK" (standart qiymat) bo'lib qoladi.
Misollar:
- •
checkSystem(true, true, false)→"CRITICAL"(CPU va xotira ikkalasi ham yuqori) - •
checkSystem(true, false, false)→"WARNING"(faqat CPU yuqori) - •
checkSystem(false, false, false)→"OK"(hech narsa noto'g'ri emas)
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
'Ikkalasi ham to'g'ri' uchun &&, 'kamida bittasi' uchun ||, va teskarisiga aylantirish uchun ! dan foydalaning. Ularni birlashtirganda, aniqlik uchun qavslardan foydalaning.
NEXT UP
Build Your Own Functions
$ go run main.go
Kodingizni ishga tushiring