Menu
CoddyTech

تعريف الواجهة

جزء من قسم المنطق وتدفق التنفيذ في رحلة GO على Coddy. الدرس 13 من 68.

والآن بعد أن فهمتَ مفهوم الواجهات، لنتعلم كيفية تعريف واجهة فعليًا في Go. تُعرَّف الواجهة باستخدام الكلمة المفتاحية interface متبوعة بمجموعة من تواقيع الأساليب المحصورة بين أقواس معقوفة.

إليك الصياغة الأساسية لتعريف واجهة:

type InterfaceName interface {
    MethodName() ReturnType
    AnotherMethod(parameter Type) ReturnType
}

لاحظ أن الواجهة تحتوي فقط على تواقيع الأساليب - اسم الأسلوب والمعاملات وأنواع الإرجاع - دون أي تنفيذ. لا تحدد الواجهة كيفية عمل هذه الأساليب، بل تحدد فقط الأساليب التي يجب أن تكون موجودة.

على سبيل المثال، إليك كيفية تعريف واجهة بسيطة Shaper تشترط أن يتضمن أي نوع يطبّقها أسلوبًا Area:

type Shaper interface {
    Area() float64
}

تُرسي هذه الواجهة عقدًا: يجب أن يكون لأي نوع يريد أن يُعدّ Shaper طريقة Area لا تأخذ أي معلمات وتُرجع float64. لا تهتم الواجهة بنوع البيانات أو بكيفية حسابه للمساحة، بل تهتم فقط بوجود الطريقة بالتوقيع الصحيح.

challenge icon

التحدي

سهل

في هذا التحدي، ستتدرّب على تعريف الواجهات في Go من خلال إنشاء نظام بسيط لمشغّل وسائط. ستعرّف واجهة تحدد عقدًا لأنواع مختلفة من أجهزة الوسائط.

ستتلقى مُدخلًا واحدًا:

  • سلسلة نصية تمثل إجراءً متعلقًا بالوسائط (مثل "play" أو "pause" أو "stop")

مهمتك هي:

  1. تعريف واجهة باسم MediaPlayer تحتوي على تواقيع ثلاث دوال:
    • Play() تُرجع سلسلة نصية
    • Pause() تُرجع سلسلة نصية
    • Stop() تُرجع سلسلة نصية
  2. بناءً على الإجراء المُدخل، اطبع توقيع الدالة المقابل من واجهة MediaPlayer بالتنسيق التالي: "MediaPlayer interface requires: [MethodName]() string"

لا يستخدم هذا البرنامج MediaPlayer بعد، ولا بأس بذلك: إذ تترجم Go الواجهة حتى عندما لا يطبّقها أي نوع. تعرض عبارات الطباعة ببساطة توقيع الدالة الذي تتطلبه واجهتك للإجراء المُعطى. في الدرس التالي، ستنشئ نوعًا يطبّق 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: عرّف واجهة MediaPlayer هنا
    
    // TODO: اكتب الشيفرة أدناه لمعالجة الإجراء وطباعة المخرجات المطلوبة
    
    // اطبع النتيجة
    // تذكّر أن تطبع بالتنسيق: "MediaPlayer interface requires: [MethodName]() string"
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم Go عبر الإنترنت