تعريف الواجهة
جزء من قسم المنطق وتدفق التنفيذ في رحلة GO على Coddy. الدرس 13 من 68.
الآن بعد أن فهمت ماهية الواجهات من الناحية المفاهيمية، لنتعلّم كيفية تعريف واحدة فعليًا في Go. تُعرَّف الواجهة باستخدام الكلمة المفتاحية interface متبوعةً بمجموعة من توقيعات الأساليب المحاطة بأقواس معقوفة.
إليك الصياغة الأساسية لتعريف واجهة:
type InterfaceName interface {
MethodName() ReturnType
AnotherMethod(parameter Type) ReturnType
}لاحظ أن الواجهة تحتوي فقط على تواقيع الأساليب - اسم الأسلوب، والمعلمات، وأنواع الإرجاع - ولكنها لا تحتوي على أي تنفيذ. لا تحدد الواجهة كيفية عمل هذه الأساليب، بل تحدد فقط الأساليب التي يجب أن تكون موجودة.
على سبيل المثال، إليك كيفية تعريف واجهة Shaper بسيطة تتطلب أن يحتوي أي type مُطبِّق لها على أسلوب Area:
type Shaper interface {
Area() float64
}تُنشئ هذه الواجهة عقدًا: يجب أن يمتلك أي نوع يريد اعتباره Shaper أسلوبًا باسم Area لا يأخذ أي معلمات ويُرجع قيمة من النوع float64. لا تهتم الواجهة بنوع النوع أو بكيفية حسابه للمساحة، بل تهتم فقط بوجود الأسلوب بالتوقيع الصحيح.
التحدي
سهلفي هذا التحدي، ستتدرّب على تعريف الواجهات في Go من خلال إنشاء نظام بسيط لمشغّل وسائط. ستعرّف واجهة تحدد عقدًا لأنواع مختلفة من أجهزة الوسائط.
ستتلقى إدخالًا واحدًا:
- سلسلة نصية تمثل إجراءً متعلقًا بالوسائط (مثل
"play"أو"pause"أو"stop")
مهمتك هي:
- تعريف واجهة باسم
MediaPlayerتحتوي على ثلاثة تواقيع لأساليب:Play()تُرجع سلسلة نصيةPause()تُرجع سلسلة نصيةStop()تُرجع سلسلة نصية
- بناءً على إجراء الإدخال، اطبع توقيع الأسلوب المطابق من واجهة
MediaPlayerبالتنسيق:"MediaPlayer interface requires: [MethodName]() string"
تهدف عبارة الطباعة إلى توضيح الواجهة التي عرّفتها أعلاه. أنت تصف توقيع الأسلوب الذي تتطلبه واجهة MediaPlayer للإجراء المحدد. فكّر في الأمر كما لو أن برنامجك يفحص عقد واجهته الخاص ويقدم تقريرًا عنه.
يجب أن تكون أسماء الأساليب بأحرف كبيرة (مُصدَّرة)، لأنها جزء من تعريف واجهة. بالنسبة إلى الإدخال "play"، اطبع "MediaPlayer interface requires: Play() string"، وبالنسبة إلى "pause" اطبع "MediaPlayer interface requires: Pause() string"، وبالنسبة إلى "stop" اطبع "MediaPlayer interface requires: Stop() string".
يركز هذا التحدي على المفهوم الأساسي لتعريف الواجهات باستخدام تواقيع الأساليب، وإنشاء العقد الذي يجب على أي نوع مُنفِّذ استيفاؤه.
جرّب بنفسك
package main
import "fmt"
func main() {
// اقرأ الإدخال
var action string
fmt.Scanln(&action)
// TODO: Define your MediaPlayer interface here
// TODO: اكتب الكود الخاص بك أدناه للتعامل مع الإجراء وطباعة المخرجات المطلوبة
// اطبع النتيجة
// Remember to print in format: "MediaPlayer interface requires: [MethodName]() string"
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1تدفق التحكم المتقدم
جملة Switch مع `fallthrough`الخروج من الحلقات المتداخلةالاستمرار في حلقة محددةجملة `goto`ملخص - التحكم المتقدم في الحلقات2الـ Structs والميثودز (Methods)
تعريف الـ Methods على الـ Structsالـ Value Receiversالـ Pointer Receiversاختيار الـ Receiversالـ Methods مقابل الـ Functionsملخص - سلوك الـ Struct5تعمق في الـ Maps
Maps من نوع Structsالـ Pointers كقيم في الـ Mapsالتحقق من الـ Nil Mapsمقارنة الـ Mapsمراجعة - عداد تكرار الكلمات3الواجهات (الأساسيات)
ما هي الواجهة؟تعريف الواجهةتطبيق الواجهةاستخدام أنواع الواجهاتالواجهة الفارغةتأكيدات النوع (Type Assertions)تبديل النوع (Type Switch)ملخص - الأشكال والسلوكياتتدرّب بنفسك: مترجم Go عبر الإنترنت