69 / 103

Methods and pointer indirection

Metodlar va pointer'lar orqali murojaat

Oldingi ikki dasturni solishtirib, pointer argumentli funksiyalar pointer'ni qabul qilishi shartligini payqagan bo'lishingiz mumkin:

example.go
var v Vertex
ScaleFunc(v, 5)  // Kompilyatsiya xatosi!
ScaleFunc(&v, 5) // OK

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

example.go
var v Vertex
v.Scale(5)  // OK
p := &v
p.Scale(10) // OK

v.Scale(5) chaqiruvida v pointer emas, qiymat bo'lsa ham, pointer receiver'li metod avtomatik chaqiriladi.

Ya'ni, qulaylik uchun Go v.Scale(5) chaqiruvini, Scale metodi pointer receiver'ga ega bo'lgani sababli, (&v).Scale(5) deb talqin qiladi.

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 pointer receiver'li Yarim() metodini yozing: ikkala koordinatani ikkiga bo'lsin. Uni ham qiymatda (v.Yarim()), ham pointer'da (p.Yarim()) chaqirib ko'ring — ikkalasi ham ishlaydi.

2-topshiriq

Ikkilash(p *Vertex) funksiyasini yozing: pointer orqali ikkala koordinatani ikki baravar oshirsin (ScaleFunc(p, 2) dan foydalanishingiz mumkin).