Menu
Coddy logo textTech

פונקציות Constructor

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

ב-Go אין בנאים כמו בשפות אחרות. במקום זאת, נהוג ליצור פונקציה בשם NewTypeName שמחזירה מבנה מאותחל, לעיתים קרובות כמצביע.

פונקציית בנאי בסיסית

type Person struct {
    Name string
    Age  int
}

func NewPerson(name string, age int) *Person {
    return &Person{
        Name: name,
        Age:  age,
    }
}

בנאי עם ערכי ברירת מחדל

type Config struct {
    Host    string
    Port    int
    Timeout int
}

func NewConfig(host string) *Config {
    return &Config{
        Host:    host,
        Port:    8080,    // ערך ברירת מחדל
        Timeout: 30,      // ערך ברירת מחדל
    }
}

בנאי עם אימות

func NewPerson(name string, age int) *Person {
    if name == "" {
        name = "Unknown"
    }
    if age < 0 {
        age = 0
    }
    return &Person{
        Name: name,
        Age:  age,
    }
}

שימוש בפונקציות בנאים

func main() {
    p1 := NewPerson("Alice", 25)
    fmt.Println(p1.Name) // Alice

    p2 := NewPerson("", -5)
    fmt.Println(p2.Name) // Unknown
    fmt.Println(p2.Age)  // 0
}

פונקציות בנאי מחזירות מצביע (*StructName) באמצעות &. כך נמנעת העתקה של המבנה, ומתאפשרת עבודה ישירה עם מתודות שמקבלות מצביע. את האימות ואת ערכי ברירת המחדל מוסיפים בתוך הבנאי.

challenge icon

אתגר

בינוני

צור פונקציית בנאי NewBankAccount עבור המבנה BankAccount עם אימות:

  • מקבלת את name (מחרוזת) ואת balance (float64) כפרמטרים
  • אם name ריק, יש להשתמש כברירת מחדל ב-"Unnamed"
  • אם balance שלילי, יש להשתמש כברירת מחדל ב-0
  • יש להגדיר את Owner ל-"Default Owner" תמיד
  • החזר מצביע למבנה החדש

נסו בעצמכם

package main

import "fmt"

func main() {
    var name string
    var balance float64
    fmt.Scan(&name, &balance)

    account := NewBankAccount(name, balance)

    fmt.Printf("Account: %s\n", account.Name)
    fmt.Printf("Balance: %.2f\n", account.Balance)
    fmt.Printf("Owner: %s\n", account.Owner)
}
quiz iconבחנו את עצמכם

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

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

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