Sobes.tech
Middle

Go interfeysining boshqa dasturlash tillaridagi interfeyslaridan qanday farqi bor?

sobes.tech AI

AIdan javob

Go interfeyslarining asosiy farqi shundaki, ular implicit (noaniq) tarzda amalga oshiriladi.

Boshqa tillarda (masalan, Java, C#), sinf aniq ravishda ma'lum bir interfeysni amalga oshirayotganligini e'lon qilishi kerak (aniq amalga oshirish).

Go'da, har qanday tur, agar u bu interfeysda belgilangan barcha metodlarni amalga oshirsa, avtomatik ravishda bu interfeysni qanoatlantiradi. Aniq amalga oshirish e'lon qilish shart emas.

Misol (Go):

// Interfeysni aniqlash
type Reader interface {
	Read(p []byte) (n int, err error)
}

// Tuzilmani aniqlash
type FileReader struct {
	// ... maydonlar
}

// FileReader uchun Read metodini amalga oshirish
func (fr FileReader) Read(p []byte) (n int, err error) {
	// ... o'qish logikasi
	return 0, nil // misol uchun joy egallovchi
}

// FileReader, Read metodiga ega bo'lgani uchun, implicit ravishda, bu interfeysni qanoatlantiradi.

Misol (Java - taqqoslash uchun):

// Interfeysni aniqlash
interface Reader {
    int read(byte[] p);
}

// Sinfni aniqlash
class FileReader implements Reader { // Aniq amalga oshirish
    // ... maydonlar

    @Override
    public int read(byte[] p) {
        // ... o'qish logikasi
        return 0; // misol uchun joy egallovchi
    }
}

Go'da implicit amalga oshirishning asosiy afzallari:

  • Ajratilgan dizayn: Yangi kutubxonalar mavjud turlar tomonidan bajarilishi mumkin bo'lgan interfeyslarni aniqlash imkonini beradi, ularni o'zgartirmasdan.
  • Moslashuvchanlik: Turli turlar bilan ishlaydigan umumiy funksiyalarni yaratishni osonlashtiradi.
  • "implements" talab qilinmaydi: Boilerplate kodni kamaytiradi.
  • Ducky typing ("qush tipini"): Agar tur qushga o'xshash va quvquvchi bo'lsa, u qush. Bu holda, agar tur interfeys metodlarini amalga oshirsa, u bu interfeys sifatida ishlatilishi mumkin.