Sobes.tech
Middle

Go arayüzü ile diğer programlama dillerindeki arayüzler arasındaki fark nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go arayüzlerindeki temel fark, bunların örtük (gizli) olarak uygulanmasıdır.

Diğer dillerde (örneğin Java, C#), bir sınıfın belirli bir arayüzü uyguladığını açıkça belirtmesi gerekir (açık uygulama).

Go'da, herhangi bir tür, bu arayüzde tanımlanan tüm yöntemleri uygularsa otomatik olarak arayüzü karşılar. Açık bir uygulama bildirimi gerekmez.

Örnek (Go):

// Arayüzü tanımla
type Reader interface {
	Read(p []byte) (n int, err error)
}

// Yapıyı tanımla
type FileReader struct {
	// ... alanlar
}

// FileReader yapısı için Read metodunu uygula
func (fr FileReader) Read(p []byte) (n int, err error) {
	// ... okuma mantığı
	return 0, nil // örnek yer tutucu
}

// FileReader, Read metoduna sahip olduğu için arayüzü örtük şekilde karşılar.

Örnek (Java - karşılaştırma için):

// Arayüzü tanımla
interface Reader {
    int read(byte[] p);
}

// Sınıfı tanımla
class FileReader implements Reader { // Açık uygulama
    // ... alanlar

    @Override
    public int read(byte[] p) {
        // ... okuma mantığı
        return 0; // örnek yer tutucu
    }
}

Go'daki örtük uygulamanın temel avantajları:

  • Bağımsız tasarım: Yeni kütüphanelerin, var olan türleri değiştirmeden karşılayabilecekleri arayüzleri tanımlamasına olanak tanır.
  • Esneklik: Farklı türlerle çalışan ve aynı arayüzü karşılayan genel fonksiyonların oluşturulmasını kolaylaştırır.
  • "implements" gerekmez: Boilerplate kodu azaltır.
  • Ördek tipi ("duck typing"): Bir tür ördeğe benziyorsa ve öterse, o bir ördektir. Bu durumda, bir tür arayüzü uygularsa, bu arayüz olarak kullanılabilir.