Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

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

جزء من قسم المنطق وتدفق التنفيذ في رحلة 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. لا تهتم الواجهة بنوع النوع أو بكيفية حسابه للمساحة، بل تهتم فقط بوجود الأسلوب بالتوقيع الصحيح.

challenge icon

التحدي

سهل

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

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

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

مهمتك هي:

  1. تعريف واجهة باسم MediaPlayer تحتوي على ثلاثة تواقيع لأساليب:
    • Play() تُرجع سلسلة نصية
    • Pause() تُرجع سلسلة نصية
    • Stop() تُرجع سلسلة نصية
  2. بناءً على إجراء الإدخال، اطبع توقيع الأسلوب المطابق من واجهة 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"
}
quiz iconاختبر نفسك

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

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

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