Повторение — формы и поведение
Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 19 из 68.
Задание
ЛегкоВ этом задании вы создадите систему коммуникации, демонстрирующую полиморфизм с помощью интерфейсов. Вы создадите интерфейс Speaker и реализуете его для разных типов, которые смогут «говорить» по-своему.
Вы получите три входных значения:
- Строку, представляющую количество создаваемых говорящих (например,
"3") - Строку с типами говорящих, разделёнными запятыми (например,
"person,parrot,person") - Строку с именами говорящих, разделёнными запятыми (например,
"Alice,Polly,Bob")
Ваша задача:
- Определить интерфейс
Speakerс одной сигнатурой метода:Speak(), который возвращает строку - Определить структуру
Personс полемNameтипа string - Определить структуру
Parrotс полемNameтипа string - Реализовать метод
Speak()для обеих структур:- Метод Person должен возвращать:
"Hello, I'm [name]" - Метод Parrot должен возвращать:
"Squawk! [name] says hello!"
- Метод Person должен возвращать:
- Создать функцию с именем
makeAllSpeak, которая принимает в качестве параметра срез интерфейсовSpeaker - Внутри
makeAllSpeakперебрать элементы среза, вызвать методSpeak()для каждого говорящего и вывести результат - Разобрать входные данные, чтобы создать соответствующие экземпляры говорящих на основе указанных типов и имён
- Сохранить всех говорящих в срезе интерфейсов
Speaker - Вызвать
makeAllSpeak, передав ей срез говорящих
Говорящие должны создаваться в том порядке, в котором они указаны во входных данных. Например, если типы — "person,parrot,person", а имена — "Alice,Polly,Bob", создайте Person с именем Alice, затем Parrot с именем Polly, а после него Person с именем Bob. Это задание демонстрирует, как с помощью общего интерфейса можно единообразно работать с разными типами, показывая возможности полиморфизма в 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, передав ей свой срез
}Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком
Оператор switch с `fallthrough`Выход из вложенных цикловПереход к следующей итерации конкретного циклаОператор `goto`Повторение: расширенное управление циклами4Проект: простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели-значенияПолучатели-указателиВыбор получателейМетоды и функцииПовторение: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картПовторение — счётчик частоты слов8Проект: простой складской учёт
Обзор проектаПроверка запасов3Интерфейсы (основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование типов интерфейсовПустой интерфейсУтверждения типовПереключатель типовПовторение — формы и поведениеПотренируйтесь самостоятельно: Онлайн-компилятор Go