Menu
Coddy logo textTech

Structs מקוננים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-GO של Coddy. שיעור 16 מתוך 107.

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

type Address struct {
    Street string
    City   string
    ZIP    string
}

type Person struct {
    Name    string
    Age     int
    Address Address  // מבנה מקונן
}

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

p := Person{
    Name: "Alice",
    Age:  30,
    Address: Address{
        Street: "123 Main St",
        City:   "Boston",
        ZIP:    "02101",
    },
}

fmt.Println(p.Address.City) // Boston

קינון מעודד שימוש חוזר בקוד. אפשר להשתמש בסוג Address בכמה מבנים כמו Person, Company או Order בלי לשכפל שדות. הגישה הזאת משקפת קשרים מהעולם האמיתי, שבהם ישויות מכילות ישויות אחרות.

type Company struct {
    Name      string
    Employees int
    Address   Address  // נעשה שימוש חוזר באותו טיפוס Address
}

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

challenge icon

אתגר

קל

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

תארגנו את הקוד בשני קבצים:

  • models.go: הגדירו שלושה מבנים שפועלים יחד:
    • Location עם השדות Building (מחרוזת) ו-Floor (מספר שלם)
    • Department עם Name (מחרוזת) ושדה Location מקונן
    • Employee עם ID (מספר שלם), Name (מחרוזת) ושדה Department מקונן
  • main.go: קראו את פרטי העובד מהקלט, צרו Employee עם מבנים מקוננים כראוי, והציגו את פרופיל העובד המלא באמצעות גישה לשדות דרך המבנה המקונן.

הקלטים הבאים יסופקו:

  • שורה 1: מזהה העובד (מספר שלם)
  • שורה 2: שם העובד
  • שורה 3: שם המחלקה
  • שורה 4: שם הבניין
  • שורה 5: מספר הקומה (מספר שלם)

פורמט הפלט:

Employee: [Name] (ID: [ID])
Department: [DepartmentName]
Location: [Building], Floor [Floor]

לדוגמה, עבור 101, Alice Chen, Engineering, Tower A ו-5, הפלט שלכם אמור להיות:

Employee: Alice Chen (ID: 101)
Department: Engineering
Location: Tower A, Floor 5

גשו לשדות המקוננים באמצעות סימון בנקודה כדי לשרשר גישה דרך היררכיית המבנים (לדוגמה, employee.Department.Location.Building).

נסו בעצמכם

package main

import "fmt"

func main() {
	// קרא את פרטי העובד
	var id int
	var name string
	var deptName string
	var building string
	var floor int

	fmt.Scanln(&id)
	fmt.Scanln(&name)
	fmt.Scanln(&deptName)
	fmt.Scanln(&building)
	fmt.Scanln(&floor)

	// TODO: צור Employee עם מבנים מקוננים כראוי
	// השתמש במבנים Location, Department ו-Employee מתוך models.go
	// אתחל את כל השדות המקוננים בערכי הקלט

	// TODO: הדפס את פרופיל העובד בפורמט הבא:
	// Employee: [Name] (ID: [ID])
	// Department: [DepartmentName]
	// Location: [Building], Floor [Floor]
	// גש לשדות מקוננים באמצעות סימון נקודה (למשל, employee.Department.Location.Building)
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה תכנות מונחה עצמים

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