Özet - Metodlar
- Go kursu
- Başlangıç
- Ders 80/90
- 4 dk
Value ve pointer receiver'ları birleştirerek bir banka hesabı yazarsın.
Metodlar özeti
Metod = alıcılı fonksiyon: func (t T) Ad(). Değer alıcı kopyayla çalışır ve salt okunur işler içindir; işaretçi alıcı asıl değeri değiştirir ve büyük ya da kopyalanmaması gereken türler içindir. Gömülü türlerin metodları yükseltilir ve gölgelenebilir; alıcıyı döndüren metodlar zincirlenebilir. String() string metodu fmt'nin yazdırma biçimini belirler.
Metod değeri ve ifadesi
Metodlar fonksiyon olarak da kullanılabilir:
h := &Hesap{}
yatir := h.Yatir // metod değeri: h'ye bağlı
yatir(50)
f := (*Hesap).Yatir // metod ifadesi: alıcı ilk parametre
f(h, 25)
fmt.Println(h.Bakiye) // 75Metod değerleri goroutine başlatırken ve geri çağrı (callback) verirken kullanışlıdır: go h.Calis().
Uygulama Nokta türü
type Nokta struct{ X, Y int } için değer alıcılı String() ("(X, Y)" biçimi) ve işaretçi alıcılı Tasi(dx, dy int) metodlarını yaz. n := Nokta{1, 2}, n.Tasi(3, 4) sonrası fmt.Println(n) yazdır.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
type Nokta struct{ X, Y int }
func (n Nokta) String() string { return fmt.Sprintf("(%d, %d)", n.X, n.Y) }
func (n *Nokta) Tasi(dx, dy int) {
n.X += dx
n.Y += dy
}
func main() {
n := Nokta{1, 2}
n.Tasi(3, 4)
fmt.Println(n)
}Beklenen çıktı
(4, 6)
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir türün metod kümesi (method set) için hangisi doğrudur?
- *T hem T hem *T alıcılı metodlara sahiptir; T yalnızca T alıcılılara Doğru cevap
- İkisi aynıdır
- T her şeyi içerir
- *T yalnızca *T alıcılılara sahiptir
Açıklama: Bu kural interface karşılamada önemlidir: işaretçi alıcılı metodla tanımlanan interface'i yalnızca *T karşılar.
2 Yazdırma biçimi
func (n Nokta) ____() string {
return fmt.Sprintf("(%d, %d)", n.X, n.Y)
}
func (n Nokta) String() string {
return fmt.Sprintf("(%d, %d)", n.X, n.Y)
}
Açıklama: String() string metodu olan türleri fmt kendi biçimiyle yazdırır.
3 Grubun özeti
| Kavram | Anlamı |
|---|---|
(t T) |
Değer alıcı |
(t *T) |
İşaretçi alıcı |
Yükseltme |
Gömülü metodlar |
return s |
Zincirleme |