Interface tanımı
- Go kursu
- Başlangıç
- Ders 81/90
- 4 dk
type ... interface ile arayüz tanımlamayı öğrenirsin.
Interface tanımı
Interface, bir türün ne yapabildiğini tanımlayan yöntem listesidir. Hangi türün olduğu değil, hangi davranışı sunduğu önemlidir:
type Sekil interface {
Alan() float64
}
func toplamAlan(sekiller []Sekil) float64 {
t := 0.0
for _, s := range sekiller {
t += s.Alan()
}
return t
}toplamAlan daire, kare ya da ileride eklenecek her şekille çalışır; yeter ki Alan() float64 yöntemi olsun.
Küçük interface'ler
Go'da interface'ler genellikle çok küçüktür, çoğu tek yöntemlidir: io.Reader (Read), io.Writer (Write), fmt.Stringer (String), error (Error). Küçük interface'leri karşılamak kolaydır ve birleştirilebilirler: type ReadWriter interface { Reader; Writer }. Atasözü: "Interface ne kadar büyükse soyutlama o kadar zayıftır."
Uygulama Şekiller
Sekil interface'ini (Alan() float64), Kare (Kenar float64) ve Dikdortgen (En, Boy float64) türlerini yaz. []Sekil{Kare{2}, Dikdortgen{3, 4}} için toplam alanı yazdır.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
type Sekil interface {
Alan() float64
}
type Kare struct{ Kenar float64 }
type Dikdortgen struct{ En, Boy float64 }
func (k Kare) Alan() float64 { return k.Kenar * k.Kenar }
func (d Dikdortgen) Alan() float64 { return d.En * d.Boy }
func main() {
t := 0.0
for _, s := range []Sekil{Kare{2}, Dikdortgen{3, 4}} {
t += s.Alan()
}
fmt.Println(t)
}Beklenen çıktı
16
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir interface değişkeninin sıfır değeri nedir?
- nil Doğru cevap
- Boş struct
- 0
- Tanımsız
Açıklama: Değer atanmamış interface nil'dir; nil interface üzerinde yöntem çağırmak panic üretir.
2 Interface türü
type Sesli ____ {
Ses() string
}
type Sesli interface {
Ses() string
}
Açıklama: type Ad interface { ... } bir yöntem listesi tanımlar.
3 Interface ve yöntemi
| Kavram | Anlamı |
|---|---|
io.Reader |
Read |
io.Writer |
Write |
fmt.Stringer |
String |
error |
Error |