Metod tanımı
- Go kursu
- Başlangıç
- Ders 75/90
- 4 dk
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()) // 12Alı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
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
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ı
func (____ Dikdortgen) Cevre() float64 {
return 2 * (d.En + d.Boy)
}
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 |