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.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Görev
KolayBu 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:
- Bir dize döndüren tek bir metot imzasına sahip bir
Vehiclearayüzü tanımlayın:GetInfo() - İki alana sahip bir
Caryapısı tanımlayın:Brand(string) veSpeed(int) Caryapısı için şu formatta bir dize döndürenGetInfo()metodunu uygulayın:"Brand: [brand], Speed: [speed] km/h"- Bir
Carörneği oluşturmak için girdileri ayrıştırın 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)
}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ışlar