GoDasturchi
Table-Driven Logic

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.

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

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

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

Hints (0/3)

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