Menu
Coddy logo textTech

הגדרת ממשק

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-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 עבור הפעולה הנתונה. חשבו על כך כאילו התוכנית שלכם בודקת את חוזה הממשק שלה עצמה ומדווחת עליו.

יש לכתוב את שמות המתודות באות גדולה בתחילתם (כדי שיהיו מיוצאות), מכיוון שהן חלק מהגדרת ממשק. עבור הקלט "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 אונליין