Zero Values in Generic Code
Generic kodda nol qiymatlar
Generic funksiya ichida ba'zan "hech narsa yo'q" holatini bildirish kerak bo'ladi — masalan, bo'sh slice'dan element olishga urinilganda. Oddiy funksiyada buni 0, "" yoki nil bilan ifodalar edingiz, lekin generic kodda T qanday tur ekanini oldindan bilmaysiz.
Yechim — Constraints darsida ko'rgan var zero T andazasi: bu Tning nol qiymatini oladi, qaysi tur bo'lishidan qat'i nazar (int uchun 0, string uchun "", pointer uchun nil, struct uchun barcha maydonlari nol qiymatda bo'lgan nusxa).
func First[T any](items []T) T {
if len(items) == 0 {
var zero T
return zero
}
return items[0]
}Bu — Errors Are Values darsidagi "muvaffaqiyatsizlikni ham qonuniy qiymat sifatida qaytarish" g'oyasining davomi, faqat bu yerda ikkinchi bool qaytarish o'rniga shunchaki nol qiymatni qaytarasiz. Ko'p hollarda (masalan, keyingi darsdagi Stack.Pop) ikkalasini birlashtirib, (T, bool) qaytarish — "qiymat va uning haqiqiyligi" — eng aniq yechim bo'ladi.
>_ Exercise
First[T any](items []T) T funksiyasini yozing. Agar items bo'sh bo'lmasa, birinchi elementni qaytaring; bo'sh bo'lsa, Tning nol qiymatini (var zero T) qaytaring.
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
var zero T — generic kodda Tning haqiqiy turidan qat'i nazar uning nol qiymatini olishning universal usuli. Bu "bo'sh" yoki "topilmadi" holatlarini generic funksiyalarda ifodalashning standart andazasidir.
NEXT UP
Project: Generic Stack
$ go run main.go
Kodingizni ishga tushiring