Table-Driven Logic
Jadval asosidagi mantiq
"Professional Go Testing" kursida jadval asosidagi testlarni ko'rgan edingiz. Xuddi shu g'oyani oddiy mantiqqa ham qo'llash mumkin: uzun switch/if zanjiri o'rniga, xarita (map) orqali qidiruv.
package main
import "fmt"
// switch bilan ham to'g'ri ishlaydi, lekin ma'lumot ko'payib borsa
// (yangi status qo'shilganda) kodni o'zgartirish kerak bo'ladi
func statusNameOld(code int) string {
switch code {
case 200:
return "OK"
case 404:
return "Not Found"
case 500:
return "Server Error"
default:
return "Unknown"
}
}
// Jadval: yangi status qo'shish — bitta qator, kod tuzilishi o'zgarmaydi
var statusNames = map[int]string{
200: "OK",
404: "Not Found",
500: "Server Error",
}
func statusName(code int) string {
if name, ok := statusNames[code]; ok {
return name
}
return "Unknown"
}
func main() {
fmt.Println(statusName(404))
fmt.Println(statusName(999))
}Xarita (map) yondashuvi ayniqsa ma'lumot vaqt o'tishi bilan o'sadigan holatlarda foydali (masalan yangi status kodlari qo'shiladigan API). switch/if bilan har safar kod tuzilishini o'zgartirish kerak, xarita bilan esa faqat yangi qatorni qo'shasiz. Lekin diqqat: agar mantiq murakkab bo'lsa (faqat oddiy "kalit->qiymat" emas), switch hali ham to'g'riroq tanlov bo'lishi mumkin.
>_ Exercise
Kunlarni raqamdan nomga xarita orqali o'giring.
- •dayNames xaritasini yarating: 1->"Dushanba", 2->"Seshanba", 3->"Chorshanba"
- •dayName(n int) string funksiyasi xaritadan qidirib, topilmasa "Noma'lum" qaytarsin
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Jadval (map) asosidagi mantiq — ma'lumot o'sib boradigan oddiy "kalit->qiymat" moslashtirishlar uchun switchga qulay muqobil.
NEXT UP
Simplification Capstone
$ go run main.go
Kodingizni ishga tushiring