ترقية الدوال
ورّث الدوال عبر التضمين
ترقية الدوال درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
وراثة الأساليب عبر التضمين
عندما تضمّن نوعًا، تُرقّى أساليبه أيضًا. ويمكن للنوع الخارجي استدعاؤها كما لو أنه عرّفها، وهذا هو شكل Go من الوراثة.
أسلوب مُرقّى
تضمّن Car النوع Engine، فتحصل تلقائيًا على أسلوبه Start.
package main
import "fmt"
type Engine struct{}
func (Engine) Start() { fmt.Println("engine started") }
type Car struct{ Engine }
func main() {
c := Car{}
c.Start()
}تعمل الأساليب على القيمة المضمّنة
يعمل الأسلوب المُرقّى على الحقل المضمّن، لا على البنية الخارجية. ولا يمكنه رؤية الحقول الأخرى في البنية الخارجية.
package main
import "fmt"
type Counter struct{ n int }
func (c *Counter) Inc() { c.n++ }
func (c Counter) Get() int { return c.n }
type Widget struct{ Counter }
func main() {
w := Widget{}
w.Inc()
w.Inc()
fmt.Println(w.Get())
}تجاوز أسلوب
عرّف أسلوبًا بالاسم نفسه في البنية الخارجية من أجل تجاوز الأسلوب المُرقّى. ويكون للأسلوب الخارجي الأولوية.
package main
import "fmt"
type Animal struct{}
func (Animal) Speak() string { return "..." }
type Dog struct{ Animal }
func (Dog) Speak() string { return "Woof" }
func main() {
fmt.Println(Dog{}.Speak())
}استدعاء النسخة المضمّنة
حتى بعد التجاوز، يمكنك الوصول إلى الأسلوب الأصلي عبر اسم النوع المضمّن.
package main
import "fmt"
type Animal struct{}
func (Animal) Speak() string { return "generic" }
type Dog struct{ Animal }
func (d Dog) Speak() string { return "Woof + " + d.Animal.Speak() }
func main() {
fmt.Println(Dog{}.Speak())
}الترقية والواجهات
بما أن الأساليب المُرقّاة جزء من مجموعة أساليب النوع الخارجي، يمكن للنوع الخارجي استيفاء الواجهات باستخدام أساليب النوع المضمّن.
package main
import "fmt"
type Stringer interface{ String() string }
type Base struct{ name string }
func (b Base) String() string { return b.name }
type Wrapper struct{ Base }
func main() {
var s Stringer = Wrapper{Base{"hi"}}
fmt.Println(s.String())
}مجموعات أساليب المؤشّر مقابل القيمة
إذا كان النوع المضمّن يملك أساليب ذات مستقبِل مؤشّر، فلن تُرقّى هذه الأساليب إلى مجموعة أساليب البنية الخارجية إلا لمؤشّر إلى البنية الخارجية، أو لقيمة قابلة لأخذ عنوانها.
التضمين لتوفير سلوك افتراضي
ضمّن نوعًا يوفر أساليب افتراضية معقولة، ثم تجاوز الأساليب القليلة التي تحتاج إلى تخصيصها فقط، فهذا نمط قوي لإعادة الاستخدام.
package main
import "fmt"
type DefaultHandler struct{}
func (DefaultHandler) Handle() string { return "default" }
type CustomHandler struct{ DefaultHandler }
func (CustomHandler) Handle() string { return "custom" }
func main() {
fmt.Println(CustomHandler{}.Handle())
}لا توجد تعددية أشكال حقيقية
بخلاف البرمجة الكائنية التقليدية، لا يستدعي الأسلوب المضمّن التوزيع مرة أخرى على التجاوز الموجود في النوع الخارجي. فلا تحتوي Go على توزيع للأساليب الافتراضية عبر التضمين.
الترقية عبر مستويات متعددة
تترقى الأساليب بصورة انتقالية: إذا ضمّن A النوع B وضمّن B النوع C، فسيحصل A على أساليب C أيضًا، ما دام لا يوجد غموض.
متى تكون ترقية الأساليب مفيدة
- إعادة استخدام السلوك من دون إعادة كتابته
- توفير قيم افتراضية يمكن تجاوزها
- استيفاء الواجهات عبر الأساليب المضمّنة
تحقق سريع
اختبر معرفتك بترقية الأساليب.
مراجعة
تعلمت ترقية الأساليب.
- تُرقّى الأساليب المضمّنة إلى النوع الخارجي
- تتجاوز الأساليب الخارجية الأساليب المُرقّاة
- يمكن الوصول إلى الأسلوب الأصلي عبر اسم النوع المضمّن
- تساعد الترقية على استيفاء الواجهات، لكنها لا توفر توزيعًا افتراضيًا
الأسئلة الشائعة
هل درس «ترقية الدوال» مجاني؟
نعم — نص درس «ترقية الدوال» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «ترقية الدوال»؟
ورّث الدوال عبر التضمين تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «ترقية الدوال»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.