Özet - Şekiller ve Davranışlar
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 19 / 68.
Görev
KolayBu meydan okumada, arayüzler aracılığıyla çok biçimliliği gösteren bir iletişim sistemi oluşturacaksın. Bir Speaker arayüzü oluşturacak ve bunu kendi benzersiz biçimlerinde "konuşabilen" farklı türlerle uygulayacaksın.
Üç girdi alacaksın:
- Oluşturulacak konuşmacı sayısını temsil eden bir dize (ör.
"3") - Virgüllerle ayrılmış konuşmacı türlerini içeren bir dize (ör.
"person,parrot,person") - Virgüllerle ayrılmış konuşmacı adlarını içeren bir dize (ör.
"Alice,Polly,Bob")
Görevin:
- Bir dize döndüren tek bir metot imzasına sahip
Speakerarayüzünü tanımlamak:Speak() Namealanı (string) bulunan birPersonstruct'ı tanımlamakNamealanı (string) bulunan birParrotstruct'ı tanımlamak- Her iki struct için
Speak()metodunu uygulamak:- Person şunu döndürmeli:
"Hello, I'm [name]" - Parrot şunu döndürmeli:
"Squawk! [name] says hello!"
- Person şunu döndürmeli:
- Parametre olarak
Speakerarayüzlerinden oluşan bir slice alanmakeAllSpeakadlı bir fonksiyon oluşturmak makeAllSpeakiçinde slice üzerinde yineleme yapmak ve her konuşmacı içinSpeak()metodunu çağırarak sonucu yazdırmak- Sağlanan türlere ve adlara göre uygun konuşmacı örneklerini oluşturmak için girdileri ayrıştırmak
- Tüm konuşmacıları
Speakerarayüzlerinden oluşan bir slice içinde saklamak - Konuşmacı slice'ınla
makeAllSpeakfonksiyonunu çağırmak
Konuşmacılar, girdide göründükleri sırayla oluşturulmalıdır. Örneğin türler "person,parrot,person" ve adlar "Alice,Polly,Bob" ise önce Alice adında bir Person, ardından Polly adında bir Parrot ve sonra Bob adında bir Person oluştur. Bu meydan okuma, farklı türlerin paylaşılan bir arayüz aracılığıyla nasıl tek biçimli şekilde ele alınabileceğini göstererek Go'da çok biçimliliğin gücünü ortaya koyar.
Kendin dene
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
// Girdiyi oku
var numSpeakersStr string
var speakerTypesStr string
var speakerNamesStr string
fmt.Scanln(&numSpeakersStr)
fmt.Scanln(&speakerTypesStr)
fmt.Scanln(&speakerNamesStr)
// Girdiyi ayrıştır
numSpeakers, _ := strconv.Atoi(numSpeakersStr)
speakerTypes := strings.Split(speakerTypesStr, ",")
speakerNames := strings.Split(speakerNamesStr, ",")
// TODO: Kodunuzu aşağıya yazın
// 1. Speaker arayüzünü (interface) tanımlayın
// 2. Person ve Parrot yapılarını (struct) tanımlayın
// 3. Her iki yapı için Speak() metotlarını uygulayın
// 4. makeAllSpeak fonksiyonunu oluşturun
// 5. Girdiye göre konuşmacıları oluşturun ve bir dilimde (slice) saklayın
// 6. Diliminizle makeAllSpeak fonksiyonunu çağırın
}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