🐹 شرح Go

الدوال على الأنواع (Methods)

ما هي الـ Method؟

دالة مرتبطة بنوع عبر مُستقبِل (receiver):

type Rectangle struct {
  width, height float64
}

func (r Rectangle) Area() float64 {
  return r.width * r.height
}

rect := Rectangle{width: 4, height: 3}
rect.Area()   // 12

المُستقبِل بالقيمة

يعمل على نسخة — لا يعدّل الأصل:

func (r Rectangle) Scaled() float64 {
  return r.width * 2   // قراءة فقط
}

المُستقبِل بالمؤشّر

يعدّل الكائن الأصلي:

func (r *Rectangle) Scale(factor float64) {
  r.width *= factor
  r.height *= factor
}

rect.Scale(2)   // يعدّل rect نفسه

متى أستخدم كلًّا؟

المُستقبِلمتى
بالقيمة (r T)قراءة فقط، أنواع صغيرة
بالمؤشّر (r *T)للتعديل، أو أنواع كبيرة (تجنّب النسخ)

💡 الاصطلاح: إن احتاج أحد الدوال مؤشّرًا، اجعلها كلها بالمؤشّر للاتساق.

Methods على أي نوع

ليس فقط البِنى:

type Celsius float64

func (c Celsius) ToFahrenheit() float64 {
  return float64(c)*9/5 + 32
}

🎯 التالي: الواجهات (Interfaces).