GoDasturchi
Zero Values in Generic Code

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).

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

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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).

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

Hints (0/3)

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