Menu
Coddy logo textTech

Resumen: Formas y comportamientos

Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 19 de 68.

challenge icon

Desafío

Fácil

En este desafío, crearás un sistema de comunicación que demuestra el polimorfismo a través de interfaces. Construirás una interfaz Speaker y la implementarás con diferentes tipos que pueden "hablar" de sus propias maneras únicas.

Recibirás tres entradas:

  • Una cadena que representa el número de hablantes a crear (por ejemplo, "3")
  • Una cadena que contiene los tipos de hablantes separados por comas (por ejemplo, "person,parrot,person")
  • Una cadena que contiene los nombres de los hablantes separados por comas (por ejemplo, "Alice,Polly,Bob")

Tu tarea es:

  1. Definir una interfaz Speaker con una firma de método: Speak() que devuelve una cadena
  2. Definir un struct Person con un campo Name (string)
  3. Definir un struct Parrot con un campo Name (string)
  4. Implementar el método Speak() para ambos structs:
    • Person debe devolver: "Hello, I'm [name]"
    • Parrot debe devolver: "Squawk! [name] says hello!"
  5. Crear una función llamada makeAllSpeak que reciba un slice de interfaces Speaker como parámetro
  6. Dentro de makeAllSpeak, iterar a través del slice y llamar al método Speak() en cada hablante, imprimiendo el resultado
  7. Analizar las entradas para crear las instancias de hablantes apropiadas basadas en los tipos y nombres proporcionados
  8. Almacenar todos los hablantes en un slice de interfaces Speaker
  9. Llamar a makeAllSpeak con tu slice de hablantes

Los hablantes deben crearse en el orden en que aparecen en la entrada. Por ejemplo, si los tipos son "person,parrot,person" y los nombres son "Alice,Polly,Bob", crea una Person llamada Alice, luego un Parrot llamado Polly, y luego una Person llamada Bob. Este desafío demuestra cómo diferentes tipos pueden ser tratados de manera uniforme a través de una interfaz compartida, mostrando el poder del polimorfismo en Go.

Pruébalo tú mismo

package main

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

func main() {
	// Leer entrada
	var numSpeakersStr string
	var speakerTypesStr string
	var speakerNamesStr string
	
	fmt.Scanln(&numSpeakersStr)
	fmt.Scanln(&speakerTypesStr)
	fmt.Scanln(&speakerNamesStr)
	
	// Analizar entrada
	numSpeakers, _ := strconv.Atoi(numSpeakersStr)
	speakerTypes := strings.Split(speakerTypesStr, ",")
	speakerNames := strings.Split(speakerNamesStr, ",")
	
	// TODO: Escribe tu código a continuación
	// 1. Definir la interfaz Speaker
	// 2. Definir las estructuras Person y Parrot
	// 3. Implementar los métodos Speak() para ambas estructuras
	// 4. Crear la función makeAllSpeak
	// 5. Crear los locutores (speakers) basados en la entrada y almacenarlos en una rebanada (slice)
	// 6. Llamar a makeAllSpeak con tu rebanada
	
}

Todas las lecciones de Lógica y Flujo