CodeBlanks Logo Icon CodeBlanks

Value receiver

Value receiver ile salt okunur metodları öğrenirsin.

Value receiver

Değer alıcı, metodun alıcının bir kopyasıyla çalıştığı anlamına gelir; metod alıcıyı değiştiremez. Bu, salt okunur hesaplar için açık bir güvencedir:

type Para struct{ Kurus int64 }

func (p Para) String() string {
    return fmt.Sprintf("%d,%02d TL", p.Kurus/100, p.Kurus%100)
}

func (p Para) Ekle(q Para) Para {
    return Para{p.Kurus + q.Kurus}  // yeni değer döner
}

Değişmez değer türleri

Standart kütüphanedeki time.Time bu yaklaşımın örneğidir: t.Add(time.Hour) t'yi değiştirmez, yeni bir zaman döndürür. Değişmez türler eşzamanlı kodda güvenle paylaşılır ve hataya daha az açıktır. Değer alıcı ayrıca hem değer hem işaretçi üzerinden çağrılabilir: (&p).String() de çalışır.

Uygulama Para türü

Yukarıdaki Para türünü, String() ve Ekle metodlarıyla yaz. a := Para{1250}, b := a.Ekle(Para{375}) için a ve b'yi yazdır (String() kullanılır).

Başlangıç kodu

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import "fmt"

type Para struct{ Kurus int64 }

func (p Para) String() string {
    return fmt.Sprintf("%d,%02d TL", p.Kurus/100, p.Kurus%100)
}

func (p Para) Ekle(q Para) Para {
    return Para{p.Kurus + q.Kurus}
}

func main() {
    a := Para{1250}
    b := a.Ekle(Para{375})
    fmt.Println(a, b)
}

Beklenen çıktı

12,50 TL 16,25 TL

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>a := Para{150}; b := a.Ekle(Para{50})</code> sonrasında <code>a.Kurus</code> kaçtır?

  • 200
  • 50
  • 0
  • 150 Doğru cevap

Açıklama: Ekle değer alıcıdır ve yeni bir Para döndürür; a değişmez, b 200 olur.

2 Yeni değer döndür

Soru
func (p Para) Ekle(q Para) Para {
    ____ Para{p.Kurus + q.Kurus}
}
Cevap
func (p Para) Ekle(q Para) Para {
    return Para{p.Kurus + q.Kurus}
}

Açıklama: Değer alıcılı metod sonucu yeni bir değer olarak döndürür.

3 Alıcı türü ve özelliği

Kavram Anlamı
Değer alıcı Kopya ile çalışır
İşaretçi alıcı Aslını değiştirir
time.Time.Add Yeni değer döner
String() string Yazdırma biçimi

Başlangıç bölümündeki tüm dersler