Menu
Coddy logo textTech

הגדרת שיטות במבנים

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-GO של Coddy. שיעור 6 מתוך 68.

ב-Go, מתודה היא פונקציה ששייכת לסוג מסוים. בניגוד לפונקציות רגילות שעומדות בפני עצמן, מתודות משויכות למבנים ומאפשרות לך להגדיר התנהגות עבור סוגי הנתונים המותאמים אישית שלך.

כדי להגדיר מתודה, מציבים מקבל בין מילת המפתח func לבין שם המתודה. המקבל מציין לאיזה טיפוס המתודה שייכת.

type Person struct {
    Name string
    Age  int
}

func (p Person) greet() {
    fmt.Printf("Hello, my name is %s\n", p.Name)
}

בדוגמה הזו, (p Person) הוא המקבל, ולכן greet היא מתודה של הטיפוס Person. המשתנה p מייצג את המופע של Person שעליו נקראת המתודה, בדומה ל־this בשפות אחרות.

לאחר מכן אפשר לקרוא למתודה באמצעות תחביר נקודות בכל מופע של Person, וכך להעניק למבנים שלך את היכולת לבצע פעולות הקשורות לנתונים שלהם.

challenge icon

אתגר

קל

באתגר הזה תתרגלו הגדרת מתודות למבנים באמצעות יצירת מערכת פשוטה לניהול ספרים. תיצרו מבנה Book ותגדירו מתודות שיאפשרו לספר להציג את המידע שלו.

הערה חשובה: מכיוון שכותרות ספרים ושמות מחברים עשויים להכיל רווחים, תצטרכו להשתמש ב-bufio.Scanner כדי לקרוא שורות קלט שלמות. הפונקציה fmt.Scanln מפסיקה לקרוא ברווח הראשון, דבר שיפגע בכותרות ובשמות מחברים המורכבים מכמה מילים. השתמשו ב-bufio.NewScanner(os.Stdin) וקראו ל-scanner.Scan() ולאחר מכן ל-scanner.Text() כדי לקרוא שורות שלמות.

תקבלו שלושה קלטים:

  • מחרוזת שמייצגת את כותרת הספר (לדוגמה, "The Go Programming Language")
  • מחרוזת שמייצגת את שם המחבר (לדוגמה, "Alan Donovan")
  • מחרוזת שמייצגת את מספר העמודים (לדוגמה, "380")

עליכם:

  1. להגדיר מבנה Book עם שלושה שדות: Title (מחרוזת), Author (מחרוזת) ו-Pages (מספר שלם)
  2. ליצור מתודה בשם displayInfo עם מקבל לפי ערך, שמדפיסה את פרטי הספר בפורמט: "Title: [title], Author: [author], Pages: [pages]"
  3. ליצור מתודה בשם getDescription עם מקבל לפי ערך, שמחזירה מחרוזת בפורמט: "[title] by [author]"
  4. להשתמש ב-bufio.Scanner כדי לקרוא כראוי את שורות הקלט:
    • ליצור סורק: scanner := bufio.NewScanner(os.Stdin)
    • עבור כל שורת קלט: לקרוא ל-scanner.Scan() ואז ל-scanner.Text()
    • כך מובטח שכותרות ושמות מחברים הכוללים רווחים ייקראו כראוי
  5. לנתח את הקלטים כדי ליצור מופע של Book
  6. לקרוא למתודה displayInfo כדי להדפיס את פרטי הספר
  7. לקרוא למתודה getDescription ולהדפיס את התיאור שהוחזר

המתודות צריכות להשתמש במשתנה המקבל כדי לגשת לשדות המבנה ולבצע את הפעולות המתאימות. זכרו שמתודות עם מקבלים לפי ערך פועלות על עותק של מופע המבנה.

נסו בעצמכם

package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
)

// TODO: הגדירו כאן את המבנה Book

// TODO: הגדירו כאן את המתודה displayInfo

// TODO: הגדירו כאן את המתודה getDescription

func main() {
    // צרו סורק לקריאת שורות קלט
    scanner := bufio.NewScanner(os.Stdin)
    
    // קראו את הכותרת
    scanner.Scan()
    title := scanner.Text()
    
    // קראו את שם המחבר
    scanner.Scan()
    author := scanner.Text()
    
    // קראו את מספר העמודים
    scanner.Scan()
    pagesStr := scanner.Text()
    
    // המירו את מחרוזת מספר העמודים למספר שלם
    pages, _ := strconv.Atoi(pagesStr)
    
    // TODO: צרו מופע של Book וקראו למתודות
    
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת התוכנית

תרגלו בעצמכם: קומפיילר Go אונליין