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 yapıcılara (constructors) sahip değildir. Bunun yerine, yaygın kullanım, genellikle bir işaretçi (pointer) olarak başlatılmış bir struct döndüren NewTypeName adında bir fonksiyon oluşturmaktır.

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 yapıcı (Constructor)

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ğrulama içeren yapıcı (constructor)

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ı (constructor) fonksiyonlar, & kullanarak bir işaretçi (*StructName) döndürür. Bu, struct'ın kopyalanmasını önler ve işaretçi alıcılı (pointer receiver) metotların doğrudan çalışmasını sağlar. Doğrulama ve varsayılan değerler yapıcı (constructor) içinde yer alır.

challenge icon

Görev

Orta

Doğrulama içeren BankAccount yapısı (struct) için bir NewBankAccount yapıcı (constructor) fonksiyonu oluşturun:

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

Kopya kağıdı

Go, yapıcılar (constructors) yerine yapıcı fonksiyonlar (constructor functions) kullanır. Genel kural, bunları NewTypeName şeklinde adlandırmak ve başlatılmış struct'a bir işaretçi (pointer) döndürmektir.

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 yapıcı:

func NewConfig(host string) *Config {
    return &Config{
        Host:    host,
        Port:    8080,    // Default value
        Timeout: 30,      // Default value
    }
}

Doğrulamalı yapıcı:

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, struct'ın kopyalanmasını önlemek ve işaretçi alıcı metotlarının (pointer receiver methods) doğrudan çalışmasına izin vermek için & kullanarak bir işaretçi (*StructName) döndürü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