CodeBlanks Logo Icon CodeBlanks

Metod tanımı

Struct'lara metod tanımlamayı öğrenirsin.

Metod tanımı

Metod, belirli bir türe bağlı fonksiyondur. func ile ad arasına parantez içinde alıcı (receiver) yazılır:

type Dikdortgen struct{ En, Boy float64 }

func (d Dikdortgen) Alan() float64 {
    return d.En * d.Boy
}

r := Dikdortgen{3, 4}
fmt.Println(r.Alan())  // 12

Alıcı adı genellikle türün baş harfidir (d); this ya da self kullanılmaz.

Metod mu fonksiyon mu?

Bir işlem bir türün verisiyle doğrudan ilgiliyse metod olarak yazmak okunurluğu artırır: r.Alan(), Alan(r)'den daha açıktır. Metodlar ayrıca interface'leri karşılamanın yoludur (ileride göreceksin). Metod değerleri de fonksiyon gibi taşınabilir: f := r.Alan; f().

Uygulama Alan ve çevre

Dikdortgen (En, Boy float64) için Alan() ve Cevre() metodlarını yaz. Dikdortgen{3, 4} için ikisini tek satırda 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 Dikdortgen struct{ En, Boy float64 }

func (d Dikdortgen) Alan() float64  { return d.En * d.Boy }
func (d Dikdortgen) Cevre() float64 { return 2 * (d.En + d.Boy) }

func main() {
    r := Dikdortgen{3, 4}
    fmt.Println(r.Alan(), r.Cevre())
}

Beklenen çıktı

12 14

Soru ve cevaplar

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

1 Hangi türe metod eklenebilir?

  • Yalnızca interface'lere
  • Aynı pakette tanımlanmış her türe Doğru cevap
  • Yalnızca struct'lara
  • int gibi yerleşik türlere de doğrudan

Açıklama: type Puan int gibi kendi tanımladığın her türe metod ekleyebilirsin; başka paketin türüne (ör. int, time.Time) doğrudan ekleyemezsin.

2 Alıcı

Soru
func (____ Dikdortgen) Cevre() float64 {
    return 2 * (d.En + d.Boy)
}
Cevap
func (d Dikdortgen) Cevre() float64 {
    return 2 * (d.En + d.Boy)
}

Açıklama: Alıcı adı gövdede kullanılan değişkendir; burada d.

3 Parça

Kavram Anlamı
(d Dikdortgen) Alıcı
Alan Metod adı
r.Alan() Metod çağrısı
f := r.Alan Metod değeri

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