Menu
CoddyTech

دوال الـ 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 عبر الإنترنت