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 אונליין