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.