Menu
CoddyTech

Yapıcı Fonksiyonlar

Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 10 / 107.

Go'da diğer dillerdeki gibi kurucular yoktur. Bunun yerine, başlatılmış bir yapı döndüren ve genellikle bir işaretçi olarak kullanılan NewTypeName adlı bir işlev oluşturmak gelenektir.

Temel kurucu işlevi

type Person struct {
    Name string
    Age  int
}

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

Varsayılan değerli kurucu

type Config struct {
    Host    string
    Port    int
    Timeout int
}

func NewConfig(host string) *Config {
    return &Config{
        Host:    host,
        Port:    8080,    // Varsayılan değer
        Timeout: 30,      // Varsayılan değer
    }
}

Doğrulamalı oluşturucu

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

Yapıcı işlevleri kullanma

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

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

Kurucu işlevler, & kullanarak bir işaretçi (*StructName) döndürür. Bu, yapının kopyalanmasını önler ve işaretçi alıcılı yöntemlerin doğrudan çalışmasını sağlar. Doğrulama ve varsayılan değerler kurucunun içine konur.

challenge icon

Görev

Orta

Doğrulama içeren bir NewBankAccount kurucu işlevini BankAccount yapısı için oluştur:

  • Parametre olarak name (string) ve balance (float64) alır
  • name boşsa varsayılan değer olarak "Unnamed" kullan
  • balance negatifse varsayılan değer olarak 0 kullan
  • Owner değerini her zaman "Default Owner" olarak ayarla
  • Yeni yapıya işaretçi döndür

Kendin dene

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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Go derleyicisi