Menu
Coddy logo textTech

まとめ:図形と振る舞い

CoddyのGOジャーニー「論理とフロー」セクションの一部 — レッスン 19/68。

challenge icon

チャレンジ

簡単

このチャレンジでは、インターフェースを通じてポリモーフィズムを実証する通信システムを作成します。Speaker インターフェースを構築し、それぞれ独自の方法で「話す」ことができる異なる型でそれを実装します。

3つの入力を受け取ります:

  • 作成するスピーカーの数(例:"3"
  • カンマで区切られたスピーカーのタイプ(例:"person,parrot,person"
  • カンマで区切られたスピーカーの名前(例:"Alice,Polly,Bob"

あなたのタスクは以下の通りです:

  1. 1つのメソッドシグネチャ Speak()(文字列を返す)を持つ Speaker インターフェースを定義する
  2. Name フィールド(文字列)を持つ Person 構造体を定義する
  3. Name フィールド(文字列)を持つ Parrot 構造体を定義する
  4. 両方の構造体に Speak() メソッドを実装する:
    • Person は "Hello, I'm [name]" を返す必要があります
    • Parrot は "Squawk! [name] says hello!" を返す必要があります
  5. Speaker インターフェースのスライスをパラメータとして受け取る makeAllSpeak という関数を作成する
  6. makeAllSpeak の内部で、スライスを反復処理し、各スピーカーの Speak() メソッドを呼び出して、その結果を出力する
  7. 入力を解析して、提供されたタイプと名前に基づいて適切なスピーカーのインスタンスを作成する
  8. すべてのスピーカーを Speaker インターフェースのスライスに格納する
  9. 作成したスピーカーのスライスを使用して makeAllSpeak を呼び出す

スピーカーは、入力に現れる順序で作成する必要があります。例えば、タイプが "person,parrot,person" で名前が "Alice,Polly,Bob" の場合、Alice という名前の Person、次に Polly という名前の Parrot、最後に Bob という名前の Person を作成します。このチャレンジは、共通のインターフェースを通じて異なる型を均一に扱う方法を示し、Go におけるポリモーフィズムの強力さを実証します。

自分で試してみよう

package main

import (
	"fmt"
	"strconv"
	"strings"
)

func main() {
	// 入力を読み込む
	var numSpeakersStr string
	var speakerTypesStr string
	var speakerNamesStr string
	
	fmt.Scanln(&numSpeakersStr)
	fmt.Scanln(&speakerTypesStr)
	fmt.Scanln(&speakerNamesStr)
	
	// 入力をパースする
	numSpeakers, _ := strconv.Atoi(numSpeakersStr)
	speakerTypes := strings.Split(speakerTypesStr, ",")
	speakerNames := strings.Split(speakerNamesStr, ",")
	
	// TODO: 以下にコードを記述してください
	// 1. Speaker インターフェースを定義する
	// 2. Person と Parrot 構造体を定義する
	// 3. 両方の構造体に Speak() メソッドを実装する
	// 4. makeAllSpeak 関数を作成する
	// 5. 入力に基づいてスピーカーを作成し、スライスに保存する
	// 6. 作成したスライスを使用して makeAllSpeak を呼び出す
	
}

論理とフローのすべてのレッスン