Menu
Coddy logo textTech

Podsumowanie – kształty i zachowania

Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 19 z 68.

challenge icon

Wyzwanie

Łatwy

W tym wyzwaniu utworzysz system komunikacji, który demonstruje polimorfizm za pomocą interfejsów. Zbudujesz interfejs Speaker i zaimplementujesz go dla różnych typów, które mogą „mówić” na swój własny, unikalny sposób.

Otrzymasz trzy dane wejściowe:

  • Łańcuch znaków reprezentujący liczbę mówców do utworzenia (np. "3")
  • Łańcuch znaków zawierający typy mówców rozdzielone przecinkami (np. "person,parrot,person")
  • Łańcuch znaków zawierający imiona mówców rozdzielone przecinkami (np. "Alice,Polly,Bob")

Twoim zadaniem jest:

  1. Zdefiniować interfejs Speaker z jedną sygnaturą metody: Speak(), która zwraca łańcuch znaków
  2. Zdefiniować strukturę Person z polem Name (łańcuch znaków)
  3. Zdefiniować strukturę Parrot z polem Name (łańcuch znaków)
  4. Zaimplementować metodę Speak() dla obu struktur:
    • Person powinna zwracać: "Hello, I'm [name]"
    • Parrot powinna zwracać: "Squawk! [name] says hello!"
  5. Utworzyć funkcję o nazwie makeAllSpeak, która przyjmuje jako parametr wycinek interfejsów Speaker
  6. Wewnątrz makeAllSpeak przejść przez wycinek i wywołać metodę Speak() dla każdego mówcy, wypisując wynik
  7. Przetworzyć dane wejściowe, aby utworzyć odpowiednie instancje mówców na podstawie podanych typów i imion
  8. Zapisać wszystkich mówców w wycinku interfejsów Speaker
  9. Wywołać makeAllSpeak z wycinkiem mówców

Mówcy powinni być tworzeni w kolejności, w jakiej pojawiają się w danych wejściowych. Na przykład, jeśli typy to "person,parrot,person", a imiona to "Alice,Polly,Bob", utwórz najpierw Person o imieniu Alice, następnie Parrot o imieniu Polly, a potem Person o imieniu Bob. To wyzwanie pokazuje, jak różne typy można traktować jednolicie za pomocą wspólnego interfejsu, demonstrując siłę polimorfizmu w Go.

Spróbuj swoich sił

package main

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

func main() {
	// Wczytaj dane wejściowe
	var numSpeakersStr string
	var speakerTypesStr string
	var speakerNamesStr string
	
	fmt.Scanln(&numSpeakersStr)
	fmt.Scanln(&speakerTypesStr)
	fmt.Scanln(&speakerNamesStr)
	
	// Przetwórz dane wejściowe
	numSpeakers, _ := strconv.Atoi(numSpeakersStr)
	speakerTypes := strings.Split(speakerTypesStr, ",")
	speakerNames := strings.Split(speakerNamesStr, ",")
	
	// TODO: Napisz swój kod poniżej
	// 1. Zdefiniuj interfejs Speaker
	// 2. Zdefiniuj struktury Person i Parrot
	// 3. Zaimplementuj metody Speak() dla obu struktur
	// 4. Utwórz funkcję makeAllSpeak
	// 5. Utwórz obiekty implementujące Speaker na podstawie danych wejściowych i zapisz je w wycinku
	// 6. Wywołaj makeAllSpeak, przekazując jej swój wycinek
	
}

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Go online