Menu
Coddy logo textTech

Yapıcı Fonksiyonlar

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

Go, diğer dillerdeki gibi kuruculara sahip değildir. Bunun yerine, başlatılmış bir yapı, çoğunlukla da bir işaretçi döndüren NewTypeName adlı bir işlev oluşturmak gelenektir.

Temel yapıcı fonksiyon

type Person struct {
    Name string
    Age  int
}

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

Varsayılan değerlere sahip 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ı fonksiyonları 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
}

Yapıcı işlevler, & kullanarak bir işaretçi (*StructName) döndürür. Bu, struct'ın kopyalanmasını önler ve işaretçi alıcılarına sahip yöntemlerin doğrudan çalışmasını sağlar. Doğrulama ve varsayılan değerler yapıcının içinde yer alır.

challenge icon

Görev

Orta

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

  • Parametre olarak name (string) ve balance (float64) alır
  • name boşsa varsayılan olarak "Unnamed" kullan
  • balance negatifse varsayılan olarak 0 kullan
  • Owner değerini her zaman "Default Owner" olarak ayarla
  • Yeni yapıya bir 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