Bir Arayüz Tanımlama
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 13 / 68.
Artık arayüzlerin kavramsal olarak ne olduğunu anladığına göre, Go'da bir arayüzü nasıl tanımlayacağını öğrenelim. Bir arayüz, interface anahtar sözcüğü ve ardından süslü parantezler içinde yer alan bir dizi yöntem imzası kullanılarak tanımlanır.
Bir arayüz tanımlamanın temel sözdizimi şöyledir:
type InterfaceName interface {
MethodName() ReturnType
AnotherMethod(parameter Type) ReturnType
}Bir arayüzün yalnızca metot imzalarını —metot adını, parametreleri ve dönüş türlerini— içerdiğine, ancak uygulama içermediğine dikkat et. Arayüz, bu metotların nasıl çalışması gerektiğini değil, yalnızca hangi metotların bulunması gerektiğini belirtir.
Örneğin, Area yöntemine sahip olmasını gerektiren basit bir Shaper arayüzünü şöyle tanımlayabilirsiniz:
type Shaper interface {
Area() float64
}Bu arayüz bir sözleşme oluşturur: Shaper olarak kabul edilmek isteyen her türün, parametre almayan ve float64 döndüren bir Area yöntemi olmalıdır. Arayüz, türün ne olduğunu veya alanı nasıl hesapladığını önemsemez; yalnızca yöntemin doğru imzayla var olmasını önemser.
Görev
KolayBu görevde, basit bir medya oynatıcı sistemi oluşturarak Go'da arayüz tanımlama pratiği yapacaksın. Farklı medya aygıtı türleri için bir sözleşme oluşturan bir arayüz tanımlayacaksın.
Bir girdi alacaksın:
- Bir medya eylemini temsil eden bir string (ör.
"play","pause"veya"stop")
Görevin:
- Üç metot imzasına sahip
MediaPlayeradlı bir arayüz tanımlamak:- Bir string döndüren
Play() - Bir string döndüren
Pause() - Bir string döndüren
Stop()
- Bir string döndüren
- Girdi eylemine göre,
MediaPlayerarayüzündeki ilgili metot imzasını şu biçimde yazdırmak:"MediaPlayer interface requires: [MethodName]() string"
Bu programda henüz hiçbir şey MediaPlayer kullanmıyor ve bu sorun değil: Go, hiçbir tür onu uygulamasa bile bir arayüzü derler. Yazdırma ifadeleri yalnızca arayüzünün verilen eylem için gerektirdiği metot imzasını bildirir. Sonraki derste MediaPlayer arayüzünü uygulayan bir tür oluşturacak ve onun metotlarını çağıracaksın.
Metot adları büyük harfle başlamalıdır (dışa aktarılmalıdır); çünkü bunlar bir arayüz tanımının parçasıdır. Girdi "play" için "MediaPlayer interface requires: Play() string", "pause" için "MediaPlayer interface requires: Pause() string" ve "stop" için "MediaPlayer interface requires: Stop() string" yazdır.
Bu görev, metot imzalarıyla arayüz tanımlama ve arayüzü uygulayan her türün yerine getirmesi gereken sözleşmeyi oluşturma temel kavramına odaklanır.
Kendin dene
package main
import "fmt"
func main() {
// Girdiyi oku
var action string
fmt.Scanln(&action)
// TODO: MediaPlayer arayüzünü burada tanımla
// TODO: action değerini işleyip gerekli çıktıyı yazdırmak için kodunu aşağıya yaz
// Sonucu yazdır
// Şu biçimde yazdırmayı unutma: "MediaPlayer interface requires: [MethodName]() string"
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1İleri Seviye Kontrol Akışı
`fallthrough` ile Switchİç İçe Döngülerden ÇıkmaBelirli Bir Döngüye Devam Etme`goto` İfadesiÖzet - İleri Seviye Döngü Kontrolü4Proje: Basit Görev Listesi
Proje KurulumuGörev Ekleme2Structlar ve Metotlar
Structlarda Metot TanımlamaValue Receiver'larPointer Receiver'larReceiver SeçimiMetotlar ve FonksiyonlarÖzet - Struct Davranışı5Derinlemesine Map'ler
Struct Map'leriMap Değeri Olarak Pointer'larNil Map KontrolüMap'leri KarşılaştırmaÖzet - Kelime Frekansı Sayacı3Arayüzler (Temeller)
Arayüz Nedir?Bir Arayüz TanımlamaBir Arayüzü UygulamaArayüz Tiplerini KullanmaBoş ArayüzTip OnaylamalarıTip SeçimiÖzet - Şekiller ve DavranışlarKendi başına pratik yap: Online Go derleyicisi