Tanlash operatori
Go dasturlash tilida switch operatori berilgan ifodaning qiymatiga qarab, bir nechta muqobil variantlardan (case) faqat bittasini tanlab bajarish uchun ishlatiladi.
U ko'p qatorli if...else if...else shartlariga qaraganda ancha toza, ixcham va o'qish uchun qulay sintaksisni taqdim etadi.
switch ifoda {
case qiymat1:
// 1-kod bloki
case qiymat2:
// 2-kod bloki
case qiymat3:
// 3-kod bloki
default:
// Hech qaysi case mos kelmasa bajariladi
}
Bu yerda:
switch kalit so'zidan keyingi ifoda hisoblanadi.case dagi qiymat bilan teng bo'lsa, o'sha blok ishga tushadi.case mos kelmasa, default bloki bajariladi.
Haftaning kun raqamiga qarab uning nomini chiqarish dasturi:
package main
import "fmt"
func main() {
dayOfWeek := 3
switch dayOfWeek {
case 1:
fmt.Println("Yakshanba")
case 2:
fmt.Println("Dushanba")
case 3:
fmt.Println("Seshanba")
case 4:
fmt.Println("Chorshanba")
case 5:
fmt.Println("Payshanba")
case 6:
fmt.Println("Juma")
case 7:
fmt.Println("Shanba")
default:
fmt.Println("Bunday kun mavjud emas")
}
}
Natija:
Seshanba
dayOfWeek o'zgaruvchisining qiymati 3 bo'lgani uchun, u case 3: bilan mos keldi va "Seshanba" satri ekranga chiqdi.
[!NOTE] C, C++ yoki Java kabi boshqa dasturlash tillaridan farqli o'laroq, Go tilida har bir
caseoxirigabreakyozish shart emas! Go dasturlash tilida mos kelgancasebajarilishi bilanswitcho'z-o'zidan to'xtaydi va blokdan chiqadi.
Agar mos kelgan case bajarilgandan so'ng, keyingi case ham shartiga qaramasdan bajarilishini xohlasak, fallthrough kalit so'zidan foydalanamiz:
package main
import "fmt"
func main() {
dayOfWeek := 3
switch dayOfWeek {
case 1:
fmt.Println("Yakshanba")
case 2:
fmt.Println("Dushanba")
case 3:
fmt.Println("Seshanba")
fallthrough
case 4:
fmt.Println("Chorshanba")
case 5:
fmt.Println("Payshanba")
default:
fmt.Println("Boshqa kun")
}
}
Natija:
Seshanba
Chorshanba
Bu yerda case 3: ichida fallthrough ishlatilgani sababli, Go to'xtamasdan keyingi case 4: dagi kodni ham bajardi.
Bir nechta qiymat uchun bir xil harakat bajarilishi kerak bo'lsa, ularni vergul bilan ajratib bitta case ga yozish mumkin:
package main
import "fmt"
func main() {
day := "Yakshanba"
switch day {
case "Shanba", "Yakshanba":
fmt.Println("Dam olish kuni (Weekend)")
case "Dushanba", "Seshanba", "Chorshanba", "Payshanba", "Juma":
fmt.Println("Ish kuni (Weekday)")
default:
fmt.Println("Noto'g'ri kun kiritildi")
}
}
Natija:
Dam olish kuni (Weekend)
Go tilida switch kalit so'zidan keyin ifoda yozmaslik ham mumkin. Bunday holda switch avtomatik tarzda true qiymatini kutadi va har bir case ga alohida mantiqiy shartlarni yozish imkonini beradi:
package main
import "fmt"
func main() {
score := 85
// Ifodasiz switch
switch {
case score >= 90:
fmt.Println("Baho: A (A'lo)")
case score >= 75:
fmt.Println("Baho: B (Yaxshi)")
case score >= 60:
fmt.Println("Baho: C (Qoniqarli)")
default:
fmt.Println("Baho: F (Qoniqarsiz)")
}
}
Natija:
Baho: B (Yaxshi)
Bu usul uzun if...else if...else zanjirini yozishdan ancha qulay, tushunarli va chiroyli hisoblanadi.
switch bilan qo'shimcha ifoda (Optional Statement)switch kalit so'zidan keyin, tekshiriladigan ifodadan oldin, nuqtali vergul (;) bilan ajratilgan holda qo'shimcha bitta ifodani ham yozish mumkin:
package main
import "fmt"
func main() {
// qo'shimcha ifoda (day := 4) va tekshiriladigan ifoda (day) nuqtali vergul bilan ajratilgan
switch day := 4; day {
case 1:
fmt.Println("Yakshanba")
case 2:
fmt.Println("Dushanba")
case 3:
fmt.Println("Seshanba")
case 4:
fmt.Println("Chorshanba")
case 5:
fmt.Println("Payshanba")
case 6:
fmt.Println("Juma")
case 7:
fmt.Println("Shanba")
default:
fmt.Println("Bunday kun mavjud emas")
}
}
Natija:
Chorshanba
Bu yerda day := 4 — qo'shimcha ifoda, day esa switch tekshiradigan asosiy ifoda. day qiymati 4 bo'lgani uchun case 4: ishga tushib, "Chorshanba" chop etiladi.