Type Parameters: Writing Generic Functions
Tur parametrlari: umumiy (generic) funksiyalar yozish
YAML Data Pipeline kursida TransformRows, GroupByCategory kabi funksiyalarni faqat Product turi bilan ishlaydigan qilib yozdingiz. Agar bir xil mantiqni boshqa turlar bilan ham qayta ishlatmoqchi bo'lsangiz-chi? Generic (umumiy) funksiyalar — kvadrat qavs ichidagi tur parametri yordamida bir marta yozib, ko'plab turlar bilan ishlatish imkonini beradi.
func MapSlice[T, U any](items []T, f func(T) U) []U {
result := make([]U, len(items))
for i, item := range items {
result[i] = f(item)
}
return result
}[T, U any] — bu ikkita tur parametri e'lon qiladi: T (kiruvchi elementlar turi) va U (natija elementlari turi). any — bu yerda cheklov (constraint): "T va U mutlaqo har qanday tur bo'lishi mumkin" degani. Chaqirganda turlarni yozish shart emas — Go ularni argumentlardan avtomatik chiqarib oladi (type inference):
doubled := MapSlice(nums, func(n int) int { return n * 2 })
// Go T=int, U=int ekanini o'zi aniqlaydi>_ Exercise
MapSlice[T, U any](items []T, f func(T) U) []U generic funksiyasini yozing. U itemsning har bir elementiga f funksiyasini qo'llab, natijalarni yangi []U slice'iga yig'ib qaytaradi.
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Generic funksiya kvadrat qavs ichida tur parametrlarini ([T, U any]) e'lon qiladi — bu funksiya tanasida haqiqiy turlar o'rniga ishlatiladigan "o'rinbosar" turlardir. Chaqirish vaqtida Go turlarni argumentlardan avtomatik chiqarib oladi, shuning uchun kod chaqiruvchi tomonda oddiy funksiyadan farq qilmaydi.
NEXT UP
Constraints: Limiting What Types Are Allowed
$ go run main.go
Kodingizni ishga tushiring