CodeBlanks Logo Icon CodeBlanks

Özet - Metodlar

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)   // 75

Metod 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

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
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

Soru
func (n Nokta) ____() string {
    return fmt.Sprintf("(%d, %d)", n.X, n.Y)
}
Cevap
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

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