Menu
Coddy logo textTech

Recapitulação - Formas e Comportamentos

Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 19 de 68.

challenge icon

Desafio

Fácil

Neste 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 é:

  1. Definir uma interface Speaker com uma assinatura de método: Speak() que retorna uma string
  2. Definir uma struct Person com um campo Name (string)
  3. Definir uma struct Parrot com um campo Name (string)
  4. Implementar o método Speak() para ambas as structs:
    • Person deve retornar: "Hello, I'm [name]"
    • Parrot deve retornar: "Squawk! [name] says hello!"
  5. Criar uma função chamada makeAllSpeak que recebe um slice de interfaces Speaker como parâmetro
  6. Dentro de makeAllSpeak, iterar pelo slice e chamar o método Speak() em cada falante, imprimindo o resultado
  7. Analisar as entradas para criar as instâncias de falantes apropriadas com base nos tipos e nomes fornecidos
  8. Armazenar todos os falantes em um slice de interfaces Speaker
  9. Chamar makeAllSpeak com 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