Menu
Coddy logo textTech

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ığınıza göre, Go'da bir arayüzün gerçekte nasıl tanımlanacağını öğrenelim. Bir arayüz, interface anahtar kelimesi ve ardından süslü parantezler içine alınmış bir dizi metot imzası kullanılarak tanımlanır.

Bir interface tanımlamak için temel sözdizimi şöyledir:

type InterfaceName interface {
    MethodName() ReturnType
    AnotherMethod(parameter Type) ReturnType
}

Bir arayüzün (interface) yalnızca metot imzalarını -metot adı, parametreler ve dönüş türleri- içerdiğine, ancak herhangi bir uygulama (implementation) içermediğine dikkat edin. Arayüz, bu metotların nasıl çalışması gerektiğini değil, yalnızca hangi metotların bulunması gerektiğini belirtir.

Örneğin, uygulayan herhangi bir türün bir Area metoduna sahip olmasını gerektiren basit bir Shaper arayüzünü şu şekilde tanımlayabilirsiniz:

type Shaper interface {
    Area() float64
}

Bu arayüz bir sözleşme belirler: Shaper olarak kabul edilmek isteyen herhangi bir tür, hiçbir parametre almayan ve bir float64 döndüren bir Area metoduna sahip olmalıdır. Arayüz, türün ne olduğuyla veya alanı nasıl hesapladığıyla ilgilenmez; sadece metodun doğru imzayla mevcut olmasıyla ilgilenir.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

challenge icon

Görev

Kolay

Bu meydan okumada, basit bir medya oynatıcı sistemi oluşturarak Go'da arayüz (interface) tanımlama pratiği yapacaksınız. Farklı medya cihazı türleri için bir sözleşme belirleyen bir arayüz tanımlayacaksınız.

Bir girdi alacaksınız:

  • Bir medya eylemini temsil eden bir dize (örneğin, "play", "pause" veya "stop")

Göreviniz şunları yapmaktır:

  1. Üç metot imzasına sahip MediaPlayer adında bir arayüz tanımlayın:
    • Bir dize döndüren Play()
    • Bir dize döndüren Pause()
    • Bir dize döndüren Stop()
  2. Girdi eylemine bağlı olarak, MediaPlayer arayüzünüzdeki ilgili metot imzasını şu formatta yazdırın: "MediaPlayer interface requires: [MethodName]() string"

Yazdırma ifadesi, yukarıda tanımladığınız arayüzü yansıtmayı amaçlamaktadır — verilen eylem için MediaPlayer arayüzünün hangi metot imzasını gerektirdiğini açıklıyorsunuz. Bunu, programınızın kendi arayüz sözleşmesini incelemesi ve raporlaması olarak düşünün.

Metot adları, bir arayüz tanımının parçası oldukları için büyük harfle başlamalıdır (dışa aktarılmalıdır). "play" girdisi 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ın.

Bu meydan okuma, metot imzalarıyla arayüz tanımlamanın temel kavramına ve herhangi bir uygulayıcı türün yerine getirmesi gereken sözleşmeyi oluşturmaya odaklanmaktadır.

Kopya kağıdı

Bir arayüz (interface), interface anahtar kelimesi ve ardından süslü parantezler içindeki metot imzaları kullanılarak tanımlanır:

type InterfaceName interface {
    MethodName() ReturnType
    AnotherMethod(parameter Type) ReturnType
}

Arayüzler yalnızca metot imzalarını (ad, parametreler, dönüş türleri) içerir, ancak uygulama (implementation) içermezler:

type Shaper interface {
    Area() float64
}

Bir arayüzdeki tüm metotları uygulayan herhangi bir tür, o arayüz sözleşmesini otomatik olarak karşılar.

Kendin dene

package main

import "fmt"

func main() {
    // Girdiyi oku
    var action string
    fmt.Scanln(&action)
    
    // TODO: MediaPlayer arayüzünüzü (interface) burada tanımlayın
    
    // TODO: Eylemi işlemek ve gerekli çıktıyı yazdırmak için kodunuzu aşağıya yazın
    
    // Sonucu yazdır
    // Şu formatta yazdırmayı unutmayın: "MediaPlayer interface requires: [MethodName]() string"
}
quiz iconKendini test et

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