0Pricing
Go Academy · Ders

Yapılar Üzerinde Yöntemler

Değer alıcıları ve işaretçi alıcıları karşılaştırması

Yapılar Üzerinde Yöntemler, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

Yöntem Nedir

Yöntem, alıcı bağımsız değişkenine sahip bir işlevdir. Alıcı, func anahtar sözcüğü ile yöntem adı arasında yer alır ve işlevi bir türe bağlar.

Değer Alıcısı

Değer alıcısı yapının bir kopyasını alır. Yöntemin durumu değiştirmesi gerekmiyorsa kullanınız:

package main
import "fmt"

type Circle struct{ Radius float64 }

func (c Circle) Area() float64 {
    return 3.14159 * c.Radius * c.Radius
}

func main() {
    c := Circle{Radius: 5}
    fmt.Printf("%.2f\n", c.Area()) // 78.54
}

İşaretçi Alıcısı

İşaretçi alıcısı, yöntemin yapıyı değiştirmesine olanak tanır. Büyük yapılar için daha verimlidir:

package main
import "fmt"

type Counter struct{ N int }

func (c *Counter) Increment() { c.N++ }
func (c *Counter) Reset()     { c.N = 0 }

func main() {
    c := Counter{}
    c.Increment(); c.Increment()
    fmt.Println(c.N) // 2
    c.Reset()
    fmt.Println(c.N) // 0
}

İşaretçi Alıcıları Ne Zaman Kullanılmalı

İşaretçi alıcılarını şu durumlarda kullanınız:

  • Yöntemin alıcıyı değiştirmesi gerektiğinde
  • Yapı büyük olduğunda (kopyalama önlenir)
  • Tutarlılık için: herhangi bir yöntemde işaretçi alıcısı varsa tüm yöntemlerde olmalıdır

Yapı küçük olduğunda ve yöntem yalnızca verileri okuduğunda değer alıcılarını kullanınız.

Yöntem İfadeleri ve Değerleri

Yöntemler birinci sınıf değerler olarak kullanılabilir:

package main
import "fmt"

type Adder struct{ Base int }

func (a Adder) Add(n int) int { return a.Base + n }

func main() {
    a := Adder{Base: 10}
    fn := a.Add          // method value — bound to a
    fmt.Println(fn(5))   // 15
}

Yapı Olmayan Türlerde Yöntemler

Yalnızca yapılarda değil, aynı paketteki herhangi bir adlandırılmış türde yöntem tanımlayabilirsiniz:

package main
import "fmt"

type Celsius float64

func (c Celsius) ToFahrenheit() float64 {
    return float64(c)*9/5 + 32
}

func main() {
    t := Celsius(100)
    fmt.Println(t.ToFahrenheit()) // 212
}

İşaretçinin Başvurusunu Otomatik Çözümleme

Yöntemleri çağırırken Go adresi otomatik olarak alır veya işaretçinin başvurusunu çözer. (&c).Method() ifadesini elle yazmanız gerekmez:

package main
import "fmt"

type Box struct{ Val int }

func (b *Box) Double() { b.Val *= 2 }

func main() {
    b := Box{Val: 5}
    b.Double()           // Go auto-takes address
    fmt.Println(b.Val)   // 10
}

Yöntemleri Zincirleme

Yöntemleri zincirleyebilmek için alıcı işaretçisini döndürünüz (oluşturucu kalıbı):

package main
import "fmt"

type Builder struct{ result string }

func (b *Builder) Add(s string) *Builder {
    b.result += s
    return b
}
func (b *Builder) Build() string { return b.result }

func main() {
    s := (&Builder{}).Add("Hello").Add(", ").Add("World").Build()
    fmt.Println(s)
}

Dize Yöntemi (fmt.Stringer)

Bir türün nasıl yazdırılacağını denetlemek için String() string yöntemini uygulayınız:

package main
import "fmt"

type Point struct{ X, Y int }

func (p Point) String() string {
    return fmt.Sprintf("(%d, %d)", p.X, p.Y)
}

func main() {
    p := Point{3, 4}
    fmt.Println(p) // (3, 4)
}

Boş İşaretçi Alıcıları

İşaretçi alıcısına sahip bir yöntem boş bir işaretçi üzerinde çağrılabilir; bu, varsayılan davranışlar için kullanışlıdır:

package main
import "fmt"

type Node struct{ Val int }

func (n *Node) Value() int {
    if n == nil { return 0 }
    return n.Val
}

func main() {
    var n *Node
    fmt.Println(n.Value()) // 0
}

Tutarlılık İlkesi

Go'nun standart kitaplığında ve Go'nun yerleşik kullanım biçiminde, bir türdeki tüm yöntemler aynı alıcı türünü kullanır; ya tümü işaretçi ya da tümü değer alıcısıdır. Bunları karıştırmak arayüzlerde fark edilmesi zor hatalara yol açar.

Kısa Kontrol

Hangi alıcı türü bir yöntemin yapının alanlarını değiştirmesine olanak tanır?

Özet: Yöntemler

Temel çıkarımlar:

  • Yöntemlerde func ile ad arasında bir alıcı bulunur
  • Değer alıcıları: salt okunur kullanım ve küçük yapılar
  • İşaretçi alıcıları: değiştirme, büyük yapılar ve tutarlılık
  • Go, işaretçi başvurularını otomatik çözer; (&v).Method() yazmanız gerekmez
  • Özel yazdırma için String() string uygulayınız

Alıştırma Görevi

Balance float64 alanına sahip bir BankAccount yapısı tanımlayınız. Deposit ve Withdraw işaretçi alıcılı yöntemleri ile bir String() değer alıcılı yöntemi ekleyiniz.

Sıkça Sorulan Sorular

“Yapılar Üzerinde Yöntemler” dersi ücretsiz mi?

Evet — “Yapılar Üzerinde Yöntemler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“Yapılar Üzerinde Yöntemler” dersinde ne öğreneceğim?

Değer alıcıları ve işaretçi alıcıları karşılaştırması Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Yapılar Üzerinde Yöntemler” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Yapı Tanımlama ve Kullanma
  2. Yapılar Üzerinde Yöntemler
  3. Yapıcı Örüntüleri
  4. Anonim Yapılar ve Birleştirme
← Go Academy Sayfasına Dön