Sobes.tech
Junior

Ördək tipi nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Qush tipinq (duck typing) — bu dinamik tipləşdirmə üslubudur, burada obyekt və ya dəyişənin tipi onun açıq irsiyyəti və ya interfeys tətbiqi əsasında deyil, onun müəyyən metodlar və ya xüsusiyyətlər toplusunun mövcudluğu əsasında müəyyən edilir. Əgər obyekt "quş kimi hərəkət edir və quş kimi qışqırırsa", o, quş sayılır.

Go-da quş tipinqi qeyri-adi interfeyslər vasitəsilə həyata keçirilir. Struktur və ya digər hər hansı məlumat tipi açıq şəkildə müəyyən bir interfeysi tətbiq etdiyini göstərməyə ehtiyac yoxdur. Yeganə şərt odur ki, məlumat tipi interfeysdə müəyyən edilmiş bütün metodları həyata keçirsin.

Nümunə:

package main

import "fmt"

// Speaker interfeysini təyin edirik
type Speaker interface {
	Speak()
}

// Dog strukturunu təyin edirik
type Dog struct{}

// Dog, Speak() metodunu həyata keçirir
func (d Dog) Speak() {
	fmt.Println("Hav!")
}

// Cat strukturunu təyin edirik
type Cat struct{}

// Cat, Speak() metodunu həyata keçirir
func (c Cat) Speak() {
	fmt.Println("Miyav!")
}

// Bu funksiya, Speaker tipində arqument qəbul edir
func MakeItSpeak(s Speaker) {
	s.Speak()
}

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

	// Hər iki obyekt, Dog və Cat, MakeItSpeak-ə verilə bilər,
	// çünki onlar hər ikisi qeyri-adi şəkildə Speaker-i həyata keçirir.
	MakeItSpeak(d)
	MakeItSpeak(c)
}

Bu nümunədə, nə Dog nə də Cat açıq şəkildə Speaker-i həyata keçirir. Ancaq, hər ikisinin də Speak() metodu var və bu, Speaker interfeysindəki metod imzasına uyğundur, ona görə də onlar Speaker gözlənilən yerdə istifadə edilə bilər.

Go-da quş tipinqinin üstünlükləri:

  • Əlverişlilik: Modulyar və genişlənə bilən sistemlərin asanlıqla yaradılmasına imkan verir.
  • Sıkı hierarxiyanın olmaması: Dizayn zamanı irs almağa və ya açıq interfeysləri həyata keçirməyə ehtiyac yoxdur.
  • Mövcud tiplərin asan istifadəsi: Hər hansı bir tip, lazım olan metodlara malikdirsə, bu interfeysi yerinə yetirə bilər, hətta bu, onun bu interfeysi nəzərə almadan hazırlanmış olsa belə.