LevelUpGo
Logical Operators

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:

OPERATORMA'NOSIMISOL
&&va, ikkalasi ham to'g'ri bo'lishi kerakage >= 18 && hasTicket
||yoki, kamida bittasi to'g'riisAdmin || isOwner
!emas, boolni teskarisiga aylantiradi!ready
example.go
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:

example.go
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:

example.go
if cpuHigh == true { ... } // ishlaydi, lekin ortiqcha
if cpuHigh { ... }         // xuddi shu narsa, idiomatik
if !cpuHigh { ... }        // false ni tekshiradi

Qo'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:

CPUHIGHMEMORYHIGHDISKFULLNATIJA
truetrueanyCRITICAL
truefalseanyWARNING
falsetrueanyWARNING
falsefalsetrueWARNING
falsefalsefalseOK

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.

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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:

OPERATORMA'NOSIMISOL
&&va, ikkalasi ham to'g'ri bo'lishi kerakage >= 18 && hasTicket
||yoki, kamida bittasi to'g'riisAdmin || isOwner
!emas, boolni teskarisiga aylantiradi!ready
example.go
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:

example.go
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:

example.go
if cpuHigh == true { ... } // ishlaydi, lekin ortiqcha
if cpuHigh { ... }         // xuddi shu narsa, idiomatik
if !cpuHigh { ... }        // false ni tekshiradi

Qo'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:

CPUHIGHMEMORYHIGHDISKFULLNATIJA
truetrueanyCRITICAL
truefalseanyWARNING
falsetrueanyWARNING
falsefalsetrueWARNING
falsefalsefalseOK

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.

Hints (0/3)

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