GoDasturchi
Multiple Type Parameters

Multiple Type Parameters

Bir nechta tur parametri

Generic funksiyalar bir nechta tur parametrini turli cheklovlar bilan birlashtirishi mumkin. Buning kuchli namunasi — YAML Data Pipeline kursidagi GroupByCategoryning generic versiyasi: endi u faqat Productga emas, istalgan elementlar turiga va istalgan kalit funksiyasiga ishlaydi.

example.go
func GroupBy[T any, K comparable](items []T, keyFn func(T) K) map[K][]T {
    groups := make(map[K][]T)
    for _, item := range items {
        key := keyFn(item)
        groups[key] = append(groups[key], item)
    }
    return groups
}

T any — elementlar mutlaqo har qanday tur bo'lishi mumkin. K comparable — kalit map kaliti bo'la olishi kerak. keyFn func(T) K — chaqiruvchi har bir elementdan qanday qilib kalit chiqarishni belgilaydi. Bu — Pointers & Memory kursidagi "xatti-harakatni funksiya parametri sifatida uzatish" g'oyasining generics bilan birlashuvi.

>_ Exercise

GroupBy[T any, K comparable](items []T, keyFn func(T) K) map[K][]T funksiyasini yozing. U har bir element uchun keyFnni chaqirib kalitni oladi va elementni o'sha kalit ostidagi slice'ga qo'shadi, so'ngra to'liq map'ni qaytaradi.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Bir nechta tur parametri (T any, K comparable) har biri o'ziga mos cheklov bilan bitta funksiyada birlashishi mumkin. GroupBy shu tufayli har qanday element turi va har qanday kalit chiqarish mantig'i bilan qayta ishlatiladigan bo'ladi — YAML Data Pipeline kursidagi qattiq turga bog'langan versiyadan ko'ra ancha moslashuvchan.

NEXT UP

Zero Values in Generic Code

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Multiple Type Parameters

Bir nechta tur parametri

Generic funksiyalar bir nechta tur parametrini turli cheklovlar bilan birlashtirishi mumkin. Buning kuchli namunasi — YAML Data Pipeline kursidagi GroupByCategoryning generic versiyasi: endi u faqat Productga emas, istalgan elementlar turiga va istalgan kalit funksiyasiga ishlaydi.

example.go
func GroupBy[T any, K comparable](items []T, keyFn func(T) K) map[K][]T {
    groups := make(map[K][]T)
    for _, item := range items {
        key := keyFn(item)
        groups[key] = append(groups[key], item)
    }
    return groups
}

T any — elementlar mutlaqo har qanday tur bo'lishi mumkin. K comparable — kalit map kaliti bo'la olishi kerak. keyFn func(T) K — chaqiruvchi har bir elementdan qanday qilib kalit chiqarishni belgilaydi. Bu — Pointers & Memory kursidagi "xatti-harakatni funksiya parametri sifatida uzatish" g'oyasining generics bilan birlashuvi.

>_ Exercise

GroupBy[T any, K comparable](items []T, keyFn func(T) K) map[K][]T funksiyasini yozing. U har bir element uchun keyFnni chaqirib kalitni oladi va elementni o'sha kalit ostidagi slice'ga qo'shadi, so'ngra to'liq map'ni qaytaradi.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Bir nechta tur parametri (T any, K comparable) har biri o'ziga mos cheklov bilan bitta funksiyada birlashishi mumkin. GroupBy shu tufayli har qanday element turi va har qanday kalit chiqarish mantig'i bilan qayta ishlatiladigan bo'ladi — YAML Data Pipeline kursidagi qattiq turga bog'langan versiyadan ko'ra ancha moslashuvchan.

NEXT UP

Zero Values in Generic Code