Recapitulação - Formas e Comportamentos
Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 19 de 68.
Desafio
FácilNeste desafio, você criará um sistema de comunicação que demonstra polimorfismo através de interfaces. Você construirá uma interface Speaker e a implementará com diferentes tipos que podem "falar" de suas próprias maneiras únicas.
Você receberá três entradas:
- Uma string representando o número de falantes a serem criados (ex:
"3") - Uma string contendo os tipos de falantes separados por vírgulas (ex:
"person,parrot,person") - Uma string contendo os nomes dos falantes separados por vírgulas (ex:
"Alice,Polly,Bob")
Sua tarefa é:
- Definir uma interface
Speakercom uma assinatura de método:Speak()que retorna uma string - Definir uma struct
Personcom um campoName(string) - Definir uma struct
Parrotcom um campoName(string) - Implementar o método
Speak()para ambas as structs:- Person deve retornar:
"Hello, I'm [name]" - Parrot deve retornar:
"Squawk! [name] says hello!"
- Person deve retornar:
- Criar uma função chamada
makeAllSpeakque recebe um slice de interfacesSpeakercomo parâmetro - Dentro de
makeAllSpeak, iterar pelo slice e chamar o métodoSpeak()em cada falante, imprimindo o resultado - Analisar as entradas para criar as instâncias de falantes apropriadas com base nos tipos e nomes fornecidos
- Armazenar todos os falantes em um slice de interfaces
Speaker - Chamar
makeAllSpeakcom seu slice de falantes
Os falantes devem ser criados na ordem em que aparecem na entrada. Por exemplo, se os tipos forem "person,parrot,person" e os nomes forem "Alice,Polly,Bob", crie uma Person chamada Alice, depois um Parrot chamado Polly e, em seguida, uma Person chamada Bob. Este desafio demonstra como diferentes tipos podem ser tratados de forma uniforme através de uma interface compartilhada, mostrando o poder do polimorfismo em Go.
Experimente você mesmo
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
// Ler entrada
var numSpeakersStr string
var speakerTypesStr string
var speakerNamesStr string
fmt.Scanln(&numSpeakersStr)
fmt.Scanln(&speakerTypesStr)
fmt.Scanln(&speakerNamesStr)
// Analisar entrada
numSpeakers, _ := strconv.Atoi(numSpeakersStr)
speakerTypes := strings.Split(speakerTypesStr, ",")
speakerNames := strings.Split(speakerNamesStr, ",")
// TODO: Escreva seu código abaixo
// 1. Defina a interface Speaker
// 2. Defina as structs Person e Parrot
// 3. Implemente os métodos Speak() para ambas as structs
// 4. Crie a função makeAllSpeak
// 5. Crie os speakers com base na entrada e armazene em um slice
// 6. Chame makeAllSpeak com seu slice
}Todas as lições de Lógica & Fluxo
1Fluxo de Controle Avançado
Switch com `fallthrough`Interrompendo Loops AninhadosContinuando um Loop EspecíficoA Instrução `goto`Recapitulação - Controle de Loop Avançado4Projeto: Lista de Tarefas Simples
Configuração do ProjetoAdicionando uma Tarefa2Structs e Métodos
Definindo Métodos em StructsRecebedores de ValorRecebedores de PonteiroEscolhendo RecebedoresMétodos vs FunçõesRecapitulação - Comportamento de Structs5Mapas em Profundidade
Mapas de StructsPonteiros como Valores de MapVerificando Mapas NilComparando MapasRecapitulação - Contador de Frequência de Palavras3Interfaces (O Básico)
O que é uma Interface?Definindo uma InterfaceImplementando uma InterfaceUsando Tipos de InterfaceInterface VaziaAsserções de TipoType SwitchRecapitulação - Formas e Comportamentos