Örtük karşılama
- Go kursu
- Başlangıç
- Ders 82/90
- 4 dk
Go'da interface'lerin örtük olarak karşılandığını öğrenirsin.
Örtük karşılama
Go'da bir tür interface'i örtük olarak karşılar: implements anahtar kelimesi yoktur. Gerekli yöntemlere sahipse tür o interface'tir:
type Ordek struct{}
func (Ordek) Ses() string { return "vak" }
type Robot struct{}
func (Robot) Ses() string { return "bip" }
for _, s := range []Sesli{Ordek{}, Robot{}} {
fmt.Println(s.Ses())
}Buna "ördek tiplemesi" (duck typing) denir ama Go'da derleme anında denetlenir.
Derleme anı kontrolü
Bir türün interface'i karşıladığını garanti etmek için boş bir atama yazılır; yöntem eksikse derleme hatası verir:
var _ Sesli = Ordek{} // Ordek, Sesli'yi karşılamalı
var _ Sesli = (*Robot)(nil) // işaretçi alıcılı yöntemler içinYöntem işaretçi alıcıyla tanımlandıysa interface'i yalnızca *T karşılar; T değeri karşılamaz.
Uygulama Sesli türler
Sesli interface'ini (Ses() string), Ordek ("vak") ve Robot ("bip") türlerini yaz. Derleme anı kontrolü için var _ Sesli = Ordek{} ekle ve iki türün seslerini sırayla yazdır.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
type Sesli interface{ Ses() string }
type Ordek struct{}
type Robot struct{}
func (Ordek) Ses() string { return "vak" }
func (Robot) Ses() string { return "bip" }
var _ Sesli = Ordek{}
func main() {
for _, s := range []Sesli{Ordek{}, Robot{}} {
fmt.Println(s.Ses())
}
}Beklenen çıktı
vak bip
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Örtük karşılamanın en büyük avantajı nedir?
- Daha hızlı çalışır
- Yöntem yazmak gerekmez
- Hata yapılamaz
- Başka paketin türü, o paket değişmeden senin interface'ini karşılayabilir Doğru cevap
Açıklama: Interface'i kullanan taraf tanımlar; os.File gibi standart türler, onları yazanlar senin interface'ini bilmeden onu karşılar.
2 Karşılama kontrolü
var ____ Sesli = Ordek{}
var _ Sesli = Ordek{}
Açıklama: Boş tanımlayıcıya atama yalnızca derleme anı tür kontrolü yapar.
3 Kavram
| Kavram | Anlamı |
|---|---|
implements |
Go'da yok |
Örtük karşılama |
Yöntemler yeterli |
var _ I = T{} |
Derleme anı kontrol |
*T alıcı |
Yalnızca *T karşılar |