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.
Görev
OrtaDoğrulama içeren BankAccount yapısı (struct) için bir NewBankAccount yapıcı (constructor) fonksiyonu oluşturun:
- Parametre olarak
name(string) vebalance(float64) alır - Eğer
nameboşsa, varsayılan olarak"Unnamed"değerini ata - Eğer
balancenegatifse, varsayılan olarak0değerini ata Owneralanı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)
}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
1Go OOP Temelleri
Harici DosyalarGo Çalışma Alanı ve ModüllerPaketler ve İçe AktarmalarDışa Aktarılan ve Aktarılmayan İsimlerGo'da OOP'ye GirişSınıf Olarak Struct'larStruct'larda Metot TanımlamaPointer ve Değer AlıcılarStruct BaşlatmaYapıcı FonksiyonlarÖzet - Basit Hesap Makinesi4Arayüzler
Arayüzlere GirişÖrtük UygulamaSözleşme Olarak ArayüzBoş Arayüz (any)Tür OnaylamaTür SeçimiArayüz BileşimiStringer ve Error ArayüzleriÖzet - Şekil Hesaplayıcı7Kapsülleme
Dışa Aktarılan ve Aktarılmayan AlanlarPaket Seviyesinde KapsüllemeGetter ve Setter MetotlarıGo'da Bilgi GizlemeÖzet - Öğrenci Kayıtları10Generics (Go 1.18+)
Generics'e GirişTür ParametreleriTür KısıtlamalarıGeneric Struct'larGeneric Metotlar İçin Geçici ÇözümÖzet - Generic Koleksiyon13Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıAbstract Factory KalıbıObserver KalıbıStrategy Kalıbı2Türler ve Struct'lar: Derinlemesine İnceleme
Temel ve Bileşik TürlerÖzel Tür TanımlamalarıStruct EtiketleriAnonim Struct'larİç İçe Geçmiş Struct'larSıfır Değerler ve VarsayılanlarÖzet - Rehber5Kalıtım Yerine Kompozisyon
Go'da Neden Kalıtım YokStruct Gömme TemelleriMetot YükseltmeBirden Fazla Struct GömmeGömme vs AgregasyonGömülü Metotları GölgelemeÖzet - Çalışan Hiyerarşisi8Hata Yönetimi ve OOP
error ArayüzüÖzel Hata TürleriHata Sarmalama (fmt.Errorf)Sentinel Hatalarerrors.Is() ve errors.As()Panic, Defer ve RecoverÖzet - Dosya Ayrıştırıcı3İşaretçiler ve Bellek
Go'da İşaretçi TemelleriStruct İşaretçileriDeğer ile Geçme ve Referans ile Geçmenew() FonksiyonuGo'da Garbage CollectionÖzet - Linked List Oluşturucu6Go'da Polimorfizm
Interface'ler ile PolimorfizmGo'da Duck TypingInterface Karşılama KurallarıPolimorfik KoleksiyonlarDependency InjectionÖzet - Payment Processor9Eşzamanlılık ve OOP
Goroutine TemelleriKanallar ve İletişimTamponlu ve Tamponsuz KanallarSelect İfadesisync.Mutex ve sync.RWMutexsync.WaitGroupThread-Safe Struct TasarımıÖzet - Worker Pool