Podsumowanie – kształty i zachowania
Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 19 z 68.
Wyzwanie
ŁatwyW 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:
- Zdefiniować interfejs
Speakerz jedną sygnaturą metody:Speak(), która zwraca łańcuch znaków - Zdefiniować strukturę
Personz polemName(łańcuch znaków) - Zdefiniować strukturę
Parrotz polemName(łańcuch znaków) - Zaimplementować metodę
Speak()dla obu struktur:- Person powinna zwracać:
"Hello, I'm [name]" - Parrot powinna zwracać:
"Squawk! [name] says hello!"
- Person powinna zwracać:
- Utworzyć funkcję o nazwie
makeAllSpeak, która przyjmuje jako parametr wycinek interfejsówSpeaker - Wewnątrz
makeAllSpeakprzejść przez wycinek i wywołać metodęSpeak()dla każdego mówcy, wypisując wynik - Przetworzyć dane wejściowe, aby utworzyć odpowiednie instancje mówców na podstawie podanych typów i imion
- Zapisać wszystkich mówców w wycinku interfejsów
Speaker - Wywołać
makeAllSpeakz 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
1Zaawansowane sterowanie przepływem
Instrukcja switch z `fallthrough`Przerywanie zagnieżdżonych pętliKontynuowanie określonej pętliInstrukcja `goto`Podsumowanie — zaawansowane sterowanie pętlami4Projekt: Prosta lista zadań
Konfiguracja projektuDodawanie zadania2Struktury i metody
Definiowanie metod dla strukturOdbiorniki przez wartośćOdbiorniki przez wskaźnikWybór odbiornikówMetody a funkcjePodsumowanie — działanie struktur5Mapy w szczegółach
Mapy strukturWskaźniki jako wartości mapSprawdzanie, czy mapy są nilPorównywanie mapPodsumowanie — licznik częstości słów3Interfejsy (podstawy)
Czym jest interfejs?Definiowanie interfejsuImplementowanie interfejsuUżywanie typów interfejsowychPusty interfejsAsercje typuPrzełącznik typówPodsumowanie – kształty i zachowaniaPoćwicz samodzielnie: Kompilator Go online