CodeBlanks Logo Icon CodeBlanks

Interface tanımı

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

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
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ü

Soru
type Sesli ____ {
    Ses() string
}
Cevap
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

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