Kas yra antis tipo žymėjimas?
sobes.tech AI
Atsakymas iš AI
Antisūkinis tipavimas (duck typing) — tai dinaminio tipavimo stilius, kai objekto ar kintamojo tipas nustatomas ne pagal jo aiškią paveldėjimą ar sąsajos įgyvendinimą, o pagal tam tikrų metodų ar savybių buvimą. Jei objektas "judės kaip antis ir kvėpuos kaip antis", manoma, kad jis yra antis.
Go kalboje antisūkinis tipavimas įgyvendinamas per neexplicitinius interfeisus. Struktūra ar bet koks kitas duomenų tipas neturi aiškiai nurodyti, kad jis įgyvendina tam tikrą interfeisą. Pakanka, kad duomenų tipas įgyvendintų visus interfeise apibrėžtus metodus.
Pavyzdys:
package main
import "fmt"
// Apibrėžiame Speaker interfeisą
type Speaker interface {
Speak()
}
// Apibrėžiame Dog struktūrą
type Dog struct{}
// Dog įgyvendina Speak() metodą
func (d Dog) Speak() {
fmt.Println("Gav!")
}
// Apibrėžiame Cat struktūrą
type Cat struct{}
// Cat įgyvendina Speak() metodą
func (c Cat) Speak() {
fmt.Println("Miau!")
}
// Funkcija, kuri priima Speaker tipo argumentą
func MakeItSpeak(s Speaker) {
s.Speak()
}
func main() {
d := Dog{}
c := Cat{}
// Abu objektai, Dog ir Cat, gali būti perduoti į MakeItSpeak,
// nes abu neexplicitiai įgyvendina Speaker.
MakeItSpeak(d)
MakeItSpeak(c)
}
Šiame pavyzdyje Dog ir Cat nėra aiškiai nurodyti kaip įgyvendinantys Speaker. Tačiau, kadangi abu turi Speak() metodą, kuris atitinka Speaker interfeiso signatūrą, jie gali būti naudojami ten, kur tikimasi Speaker tipo.
Go kalbos antisūkinio tipavimosi privalumai:
- Lankstumas: leidžia lengvai kurti moduliškas ir išplečiamas sistemas.
- Griežta hierarchija nėra būtina: paveldėjimas ar aiškus interfeisų įgyvendinimas nėra privalomas.
- Esamų tipų paprastas naudojimas: bet kuris tipas, turintis reikalingus metodus, gali atitikti interfeisą, net jei jis buvo sukurtas be to tikslo.