70 / 103

Methods and pointer indirection (2)

Metodlar va pointer'lar orqali murojaat (2)

Xuddi shunga o'xshash narsa teskari yo'nalishda ham ro'y beradi.

Qiymat argumentli funksiyalar aynan shu tipdagi qiymatni qabul qilishi shart:

example.go
var v Vertex
fmt.Println(AbsFunc(v))  // OK
fmt.Println(AbsFunc(&v)) // Kompilyatsiya xatosi!

Qiymat receiver'li metodlar esa chaqirilganda receiver sifatida qiymatni ham, pointer'ni ham qabul qiladi:

example.go
var v Vertex
fmt.Println(v.Abs()) // OK
p := &v
fmt.Println(p.Abs()) // OK

Bu holatda p.Abs() metod chaqiruvi (*p).Abs() deb talqin qilinadi.

Topshiriqlar

Yechimni kodning pastki qismidagi Topshiriqlar bo'limiga yozing, so'ng Submit tugmasini bosing. Mavzu mustahkam o'zlashishi uchun ikkala topshiriqni ham bajaring.

1-topshiriq

Vertex uchun qiymat receiver'li Yigindi() float64 metodini yozing: X + Y ni qaytarsin. Uni qiymatda ham, pointer'da ham chaqirsa bo'lishini tekshiring.

2-topshiriq

KvadratUzunlik(v Vertex) float64 funksiyasini yozing: X*X + Y*Y ni qaytarsin. Funksiya qiymat kutgani uchun, pointer p da uni KvadratUzunlik(*p) shaklida chaqirish kerak.