Sobes.tech
Middle

Go interfeysinin digər proqramlaşdırma dillərindəki interfeyslərdən fərqi nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Go interfeyslerinin əsas fərqi odur ki, onlar qavrayışlı (gizli) şəkildə həyata keçirilir.

Digər dillərdə (məsələn, Java, C#), sinif müəyyən bir interfeysi açıq şəkildə həyata keçirməlidir (açıq həyata keçirmə).

Go-da, hər hansı bir növ, bu interfeysdə müəyyən edilmiş bütün metodları həyata keçirərsə, avtomatik olaraq bu interfeysi təmin edir. Açıq şəkildə həyata keçirməyə ehtiyac yoxdur.

Nümunə (Go):

// Interfeysi təyin edirik
type Reader interface {
	Read(p []byte) (n int, err error)
}

// Struktur təyin edirik
type FileReader struct {
	// ... sahələr
}

// FileReader üçün Read metodunu həyata keçiririk
func (fr FileReader) Read(p []byte) (n int, err error) {
	// ... oxuma məntiqi
	return 0, nil // nümunə yer tutucu
}

// FileReader, Read metoduna malik olduğu üçün, qavrayışlı şəkildə bu interfeysi təmin edir.

Nümunə (Java - müqayisə üçün):

// Interfeysi təyin edirik
interface Reader {
    int read(byte[] p);
}

// Sinfi təyin edirik
class FileReader implements Reader { // açıq şəkildə həyata keçirmə
    // ... sahələr

    @Override
    public int read(byte[] p) {
        // ... oxuma məntiqi
        return 0; // nümunə yer tutucu
    }
}

Go-da qavrayışlı həyata keçirmənin əsas üstünlükləri:

  • Ayrılmış dizayn: Yeni kitabxanaların mövcud tiplər tərəfindən yerinə yetirilə bilən interfeysləri təyin etməsinə imkan verir, onları dəyişdirmədən.
  • Əlverişlilik: Müxtəlif tiplərlə işləyən ümumi funksiyaların yaradılmasını asanlaşdırır.
  • "implements"-ə ehtiyac yoxdur: Boilerplate kodu azaldır.
  • "Duck typing" ("qaz duck" tipi): Əgər bir növ qaz kimi görünür və ququ kimi ququlursa, onda o qazdır. Bu halda, əgər növ interfeysin metodlarını həyata keçirirsə, onu həmin interfeys kimi istifadə etmək olar.