Qush turini aniqlash nima?
sobes.tech AI
AIdan javob
Qush tiping (duck typing) — bu dinamik tiplash uslubidir, unda ob'ekt yoki o'zgaruvchining turi uning aniq merosxo'rligi yoki interfeysni amalga oshirishiga asoslanmay, balki uning ma'lum bir metodlar yoki xususiyatlar to'plamining mavjudligiga asoslanadi. Agar ob'ekt "qush kabi yurib, qush kabi qichqirsa", u qush hisoblanadi.
Go tilida qush tiplash bilinmaydigan interfeyslar orqali amalga oshiriladi. Struktur yoki boshqa har qanday ma'lumot turi aniq ravishda ma'lum bir interfeysni amalga oshirayotganligini ko'rsatishi shart emas. Yetarli bo'ladiki, ma'lumot turi interfeysda belgilangan barcha metodlarni amalga oshirsin.
Misol:
package main
import "fmt"
// Speaker interfeysini aniqlaymiz
type Speaker interface {
Speak()
}
// Dog strukturasi
type Dog struct{}
// Dog, Speak() metodini amalga oshiradi
func (d Dog) Speak() {
fmt.Println("Gav!")
}
// Cat strukturasi
type Cat struct{}
// Cat, Speak() metodini amalga oshiradi
func (c Cat) Speak() {
fmt.Println("Miy!")
}
// Bu funksiya, Speaker turidagi argumentni qabul qiladi
func MakeItSpeak(s Speaker) {
s.Speak()
}
func main() {
d := Dog{}
c := Cat{}
// Ikkala ob'ekt, Dog va Cat, MakeItSpeak ga uzatilishi mumkin,
// chunki ular ikkalasi ham bilmaydigan tarzda Speaker ni amalga oshiradi.
MakeItSpeak(d)
MakeItSpeak(c)
}
Ushbu misolda, na Dog na Cat aniq ravishda Speaker ni amalga oshirayotganligini ko'rsatmaydi. Biroq, ular ikkalasi ham Speak() metodiga ega bo'lib, bu metod Speaker interfeysidagi imzoga mos keladi, shuning uchun ular Speaker kutilgan joyda ishlatilishi mumkin.
Go tilida qush tiplashning afzalliklari:
- Moslashuvchanlik: Modulli va kengaytiriladigan tizimlarni osongina yaratish imkonini beradi.
- Qattiq hierarxiya yo'qligi: Dizaynda meros olish yoki aniq interfeyslarni amalga oshirish shart emas.
- Mavjud turlarni oson ishlatish: Kerakli metodlarga ega har qanday tur, bu interfeysni bajarishi mumkin, hatto u bu interfeysni hisobga olmagan holda ishlab chiqilgan bo'lsa ham.