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.

Bir arayüzü nasıl tanımlayacağınızı öğrendiğinize göre, Go türlerinin bunları gerçekte nasıl uyguladığını öğrenelim. Anlaşılması gereken en önemli nokta, Go'nun örtük uygulama (implicit implementation) kullandığıdır; herhangi bir özel anahtar kelime 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.

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 görevde, basit bir araç sistemi oluşturarak bir arayüz (interface) uygulama pratiği yapacaksınız. Go'nun örtük (implicit) uygulaması aracılığıyla bir Vehicle arayüzünü otomatik olarak uygulayan bir Car yapısı (struct) oluşturacaksınız.

İki girdi alacaksınız:

  • Arabanın markasını temsil eden bir dize (örneğin, "Toyota")
  • Arabanın km/sa cinsinden hızını temsil eden bir dize (örneğin, "120")

Göreviniz şunları yapmaktır:

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

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

Kopya kağıdı

Go, arayüzler için örtük uygulama kullanır; herhangi bir özel anahtar kelimeye 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:

type Circle struct {
    Radius float64
}

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

Circle, float64 döndüren bir Area() metoduna sahip olduğu için, açık bir bildirim olmaksızın Shaper arayüzünü otomatik olarak uygular.

Bu örtük yaklaşım Go arayüzlerini esnek kılar; mevcut herhangi bir tür, arayüz türden sonra oluşturulmuş olsa bile, gerekli metotlara sahip olduğu sürece yeni bir arayüzü karşılayabilir.

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