Menu
Coddy logo textTech

Bir Arayüzü Uygulama

Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 14 / 68.

Artık bir arayüzü nasıl tanımlayacağınızı bildiğinize göre, Go türlerinin bunları gerçekte nasıl uyguladığını öğrenelim. Anlamanız gereken en önemli şey, Go'nun örtük uygulama kullanmasıdır; özel bir anahtar sözcüğe veya bildirime gerek yoktur.

Eğer bir tür, bir arayüzün gerektirdiği tüm metotlara sahipse, o arayüzü otomatik olarak karşılar. Türünüzün arayüzü uyguladığını açıkça belirtmenize gerek yoktur - Go bunu sizin yerinize halleder.

Önceki dersteki Shaper arayüzü ile nasıl çalıştığı aşağıda açıklanmıştır:

type Circle struct {
    Radius float64
}

func (c Circle) Area() float64 {
    return 3.14159 * c.Radius * c.Radius
}

Circle tipi, float64 döndüren bir Area() metoduna sahip olduğu için, Shaper arayüzünü otomatik olarak uygular. Bu ilişkiyi açıkça belirtmeye gerek yoktur; Go, bunu metod imzası eşleşmesine dayanarak tanır.

Bu örtük yaklaşım, Go arayüzlerini inanılmaz derecede esnek kılar. Mevcut herhangi bir tür, arayüz tür yazıldıktan sonra oluşturulmuş olsa bile, gerekli metotlara sahip olduğu sürece yeni bir arayüzü karşılayabilir.

challenge icon

Görev

Kolay

Bu meydan okumada, basit bir araç sistemi oluşturarak bir arayüz uygulama pratiği yapacaksın. Go'nun örtük uygulaması sayesinde Vehicle arayüzünü otomatik olarak uygulayan bir Car yapısı oluşturacaksın.

İki girdi alacaksın:

  • Aracın markasını temsil eden bir dize (ör. "Toyota")
  • Aracın km/sa cinsinden hızını temsil eden bir dize (ör. "120")

Görevin şunları yapmaktır:

  1. Bir metot imzası içeren bir Vehicle arayüzü tanımla: dize döndüren GetInfo()
  2. İki alana sahip bir Car yapısı tanımla: Brand (string) ve Speed (int)
  3. Car yapısı için, şu biçimde bir dize döndüren GetInfo() metodunu uygula: "Brand: [brand], Speed: [speed] km/h"
  4. Bir Car örneği oluşturmak için girdileri ayrıştır
  5. GetInfo() metodunu çağır ve sonucu yazdır

Go'da, gerekli doğru imzaya sahip GetInfo() metoduna sahip olduğu için Car yapısının Vehicle arayüzünü otomatik olarak uygulayacağını unutma. Car'ın Vehicle'ı uyguladığını açıkça belirtmeye gerek yoktur; Go bu ilişkiyi örtük olarak tanır.

Kendin dene

package main

import (
	"fmt"
	"strconv"
)

// TODO: 1. GetInfo() string metoduna sahip Vehicle arayüzünü (interface) tanımlayın

// TODO: 2. Brand (string) ve Speed (int) alanlarına sahip Car yapısını (struct) tanımlayın

// TODO: 3. Car için GetInfo() metodunu uygulayın

func main() {
	// Girdiyi oku
	var brand string
	var speedStr string
	fmt.Scanln(&brand)
	fmt.Scanln(&speedStr)

	// Hız dizesini tam sayıya dönüştür
	speed, _ := strconv.Atoi(speedStr)

	// TODO: 4. Brand ve speed kullanarak bir Car örneği oluşturun, ardından GetInfo() metodunu çağırın
	result := "" // bu satırı kendi uygulamanızla değiştirin
	_ = brand
	_ = speed

	// Sonucu yazdır
	fmt.Println(result)
}
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

Kendi başına pratik yap: Online Go derleyicisi