Advanced Switch Patterns
Ilg'or switch naqshlari
Go'ning switchi faqat aniq qiymatlarni emas, shartlarni ham solishtira oladi ("switch true"), va turlarni tekshirish uchun ham ishlatiladi ("type switch").
package main
import "fmt"
// Shartli switch (aniq qiymatsiz) — if/else if zanjirining muqobili
func describe(n int) string {
switch {
case n < 0:
return "manfiy"
case n == 0:
return "nol"
default:
return "musbat"
}
}
// Type switch — qiymatning haqiqiy turini tekshiradi
func typeOf(v interface{}) string {
switch v.(type) {
case int:
return "son"
case string:
return "matn"
default:
return "boshqa"
}
}
func main() {
fmt.Println(describe(-5))
fmt.Println(typeOf("salom"))
}switch { case shart1: ... } — qiymatsiz switch, har bir case — to'liq mantiqiy shart (bu "Advanced Flag Patterns"dagi kabi emas, oddiy if/else if zanjiriga to'g'ridan-to'g'ri muqobil). switch v.(type) esa interface{} ichidagi qiymatning haqiqiy turi bo'yicha tarmoqlanadi — bu "Interfaces & Polymorphism" kursida ko'rgan type assertion'ning ko'plab holatlar uchun qulay shakli.
>_ Exercise
Shartli switch bilan baho toifasini aniqlang.
- •letterGrade(score int) string yozing: >=90 "A", >=75 "B", >=60 "C", aks holda "F"
- •qiymatsiz switch (switch { case ...: }) bilan yozing
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Qiymatsiz switch { case shart: } — ko'p shartli if/else if zanjiriga toza muqobil; switch v.(type) esa turlarni tekshirish uchun ishlatiladi.
NEXT UP
Table-Driven Logic
$ go run main.go
Kodingizni ishga tushiring