Sobes.tech
Junior

Ce este tipizarea raței?

sobes.tech AI

Răspuns de la AI

Tipizarea rață (duck typing) este un stil de tipizare dinamică în care tipul unui obiect sau variabilei nu este determinat pe baza moștenirii explicite sau implementării unei interfețe, ci pe baza prezenței unui anumit set de metode sau proprietăți. Dacă un obiect "mergă ca o rață și quack ca o rață", atunci se consideră că este o rață.

În Go, tipizarea rață este implementată prin interfețe implicite. Structura sau orice alt tip de date nu trebuie să indice explicit că implementează o anumită interfață. Este suficient ca tipul de date să implementeze toate metodele definite în interfață.

Exemplu:

package main

import "fmt"

// Definim interfața Speaker
type Speaker interface {
	Speak()
}

// Definim structura Dog
type Dog struct{}

// Dog implementează metoda Speak()
func (d Dog) Speak() {
	fmt.Println("Hau!")
}

// Definim structura Cat
type Cat struct{}

// Cat implementează metoda Speak()
func (c Cat) Speak() {
	fmt.Println("Miau!")
}

// Funcția acceptă un argument de tip Speaker
func MakeItSpeak(s Speaker) {
	s.Speak()
}

func main() {
	d := Dog{}
	c := Cat{}

	// Ambele obiecte, Dog și Cat, pot fi transmise la MakeItSpeak,
	// deoarece ambele implementează implicit Speaker.
	MakeItSpeak(d)
	MakeItSpeak(c)
}

În acest exemplu, nici Dog nici Cat nu indică explicit că implementează Speaker. Cu toate acestea, deoarece ambele au metoda Speak(), care corespunde semnăturii metodei din interfața Speaker, pot fi utilizate acolo unde se așteaptă un Speaker.

Avantajele tipizării rață în Go:

  • Flexibilitate: Permite crearea ușoară a sistemelor modulare și extensibile.
  • Lipsa unei ierarhii rigide: Nu este necesar să moștenești sau să implementezi explicit interfețe în timpul proiectării.
  • Ușurința utilizării tipurilor existente: Orice tip care are metodele necesare poate îndeplini interfața, chiar dacă a fost dezvoltat fără a ține cont de această interfață.