GoDasturchi
Use Named Result Parameters Sparingly

Use Named Result Parameters Sparingly

Nomlangan natija parametrlarini ehtiyotkorlik bilan ishlating

Go'da funksiya qaytaradigan qiymatlarga oldindan nom berish mumkin ("nomlangan natija"). Bu ba'zan foydali, lekin haddan tashqari ishlatilsa, kodni tushunish qiyinlashtiradi.

example.go
package main

import "fmt"

// Foydali holat: defer orqali natijani o'zgartirish kerak bo'lganda
func divide(a, b int) (result int, err error) {
	defer func() {
		if r := recover(); r != nil {
			err = fmt.Errorf("qayta tiklandi: %v", r)
		}
	}()
	result = a / b
	return
}

func main() {
	r, err := divide(10, 2)
	fmt.Println(r, err)

	r2, err2 := divide(10, 0)
	fmt.Println(r2, err2)
}

Bu — nomlangan natijalarning eng yaxshi ishlatilish holati: defer ichidagi funksiya errni nomi orqali "tutib olib" o'zgartira oladi — bu recover() bilan panic'ni xatoga aylantirishning standart naqshi. Lekin oddiy, qisqa funksiyalarda nomlangan natijalarni faqat "hujjat" sifatida ishlatish (masalan func Divide(a, b int) (quotient int, remainder int)) ba'zan foydali, ammo ularni majburiy emas deb bilib, faqat aniq foyda bergan joyda ishlating — aks holda ular qaysi qiymat qachon o'rnatilganini kuzatishni qiyinlashtiradi.

>_ Exercise

Panic'dan qutulish uchun nomlangan natijani ishlating.

  • safeIndex(s []int, i int) (value int, err error) yozing
  • defer+recover bilan panic bo'lsa err'ni to'ldiring
  • to'g'ri va noto'g'ri indeks uchun sinab ko'ring

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Nomlangan natijalar defer+recover bilan panic'ni xatoga aylantirishda ayniqsa foydali; boshqa hollarda ularni faqat aniq foyda bo'lgandagina ishlating.

NEXT UP

Idioms Capstone

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Use Named Result Parameters Sparingly

Nomlangan natija parametrlarini ehtiyotkorlik bilan ishlating

Go'da funksiya qaytaradigan qiymatlarga oldindan nom berish mumkin ("nomlangan natija"). Bu ba'zan foydali, lekin haddan tashqari ishlatilsa, kodni tushunish qiyinlashtiradi.

example.go
package main

import "fmt"

// Foydali holat: defer orqali natijani o'zgartirish kerak bo'lganda
func divide(a, b int) (result int, err error) {
	defer func() {
		if r := recover(); r != nil {
			err = fmt.Errorf("qayta tiklandi: %v", r)
		}
	}()
	result = a / b
	return
}

func main() {
	r, err := divide(10, 2)
	fmt.Println(r, err)

	r2, err2 := divide(10, 0)
	fmt.Println(r2, err2)
}

Bu — nomlangan natijalarning eng yaxshi ishlatilish holati: defer ichidagi funksiya errni nomi orqali "tutib olib" o'zgartira oladi — bu recover() bilan panic'ni xatoga aylantirishning standart naqshi. Lekin oddiy, qisqa funksiyalarda nomlangan natijalarni faqat "hujjat" sifatida ishlatish (masalan func Divide(a, b int) (quotient int, remainder int)) ba'zan foydali, ammo ularni majburiy emas deb bilib, faqat aniq foyda bergan joyda ishlating — aks holda ular qaysi qiymat qachon o'rnatilganini kuzatishni qiyinlashtiradi.

>_ Exercise

Panic'dan qutulish uchun nomlangan natijani ishlating.

  • safeIndex(s []int, i int) (value int, err error) yozing
  • defer+recover bilan panic bo'lsa err'ni to'ldiring
  • to'g'ri va noto'g'ri indeks uchun sinab ko'ring

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Nomlangan natijalar defer+recover bilan panic'ni xatoga aylantirishda ayniqsa foydali; boshqa hollarda ularni faqat aniq foyda bo'lgandagina ishlating.

NEXT UP

Idioms Capstone