0Pricing
Go Academy · درس

تضمين Interface

كوّن الواجهات

تضمين Interface درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

تركيب الواجهات

يمكن للواجهات تضمين واجهات أخرى، فتجمع مجموعات أساليبها في عقد أكبر. وتستخدم المكتبة القياسية هذا الأسلوب في كل مكان.

صياغة التضمين

أدرج نوع واجهة داخل واجهة أخرى لتضمين جميع أساليبها.

package main

import "fmt"

type Reader interface{ Read() string }
type Writer interface{ Write(s string) }
type ReadWriter interface {
	Reader
	Writer
}

func main() {
	var rw ReadWriter
	fmt.Println(rw == nil)
}

استخدام io.ReadWriter عمليًا

المثال الكلاسيكي هو io.ReadWriter، المعرّف بتضمين io.Reader وio.Writer. ويستوفيه أي نوع يملك كلا الأسلوبين.

استيفاء واجهة مركّبة

يطبّق النوع الملموس الواجهة المدمجة ببساطة عبر امتلاكه جميع الأساليب المطلوبة.

package main

import "fmt"

type Reader interface{ Read() string }
type Writer interface{ Write(s string) }
type ReadWriter interface {
	Reader
	Writer
}

type File struct{ data string }

func (f *File) Read() string  { return f.data }
func (f *File) Write(s string) { f.data = s }

func main() {
	var rw ReadWriter = &File{}
	rw.Write("hi")
	fmt.Println(rw.Read())
}

لماذا نركّب الواجهات

من السهل تطبيق الواجهات الصغيرة واختبارها. ويسمح تركيبها ببناء عقود أكبر عند الحاجة فقط، مع إبقاء كل جزء في الحد الأدنى.

البناء من أجزاء صغيرة

عرّف واجهات مركّزة ذات أسلوب واحد، ثم ادمجها.

package main

import "fmt"

type Opener interface{ Open() }
type Closer interface{ Close() }
type OpenCloser interface {
	Opener
	Closer
}

type Door struct{}

func (Door) Open()  { fmt.Println("opened") }
func (Door) Close() { fmt.Println("closed") }

func main() {
	var oc OpenCloser = Door{}
	oc.Open()
	oc.Close()
}

لا توجد أساليب مكررة

يجب ألا تضيف الواجهات المضمّنة أساليب متداخلة ذات توقيعات متعارضة؛ أما مجموعات الأساليب المتطابقة فهي مقبولة في Go الحديثة.

قبول الواجهات الأضيق

ينبغي للدوال أن تطلب أصغر واجهة تحتاج إليها. استخدم io.Reader بدلًا من io.ReadWriteCloser إذا كنت تقرأ فقط.

package main

import "fmt"

type Reader interface{ Read() string }

func dump(r Reader) { fmt.Println(r.Read()) }

type Buf struct{}

func (Buf) Read() string { return "data" }

func main() {
	dump(Buf{})
}

عائلة io

تركّب المكتبة القياسية Reader وWriter وCloser في ReadCloser وWriteCloser وReadWriteCloser، لتشكّل شبكة نظيفة من العقود.

الواجهات المركّبة في واجهات البرمجة

أعد أوسع واجهة تدعمها القيمة، لكن اقبل أضيق واجهة تستخدمها دالتك. فهذا يزيد المرونة والوضوح معًا.

تضمين الواجهة مقابل تضمين البنية

  • يرقّي تضمين البنية الحقول والأساليب لإعادة استخدام السلوك
  • يجمع تضمين الواجهة متطلبات الأساليب في عقد أكبر

تحقق سريع

اختبر معرفتك بتضمين الواجهات.

مراجعة

تعلمت تضمين الواجهات.

  • أدرج الواجهات داخل واجهة أخرى لدمج مجموعات الأساليب
  • تركّب حزمة io الواجهات Reader وWriter وCloser
  • أبقِ الواجهات الأساسية صغيرة، وركّبها عند الحاجة
  • اقبل أضيق واجهة تتطلبها الدالة

الأسئلة الشائعة

هل درس «تضمين Interface» مجاني؟

نعم — نص درس «تضمين Interface» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «تضمين Interface»؟

كوّن الواجهات تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «تضمين Interface»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تضمين Struct
  2. تضمين Interface
  3. ترقية الدوال
  4. التركيب بدلًا من الوراثة
← العودة إلى Go Academy