Resumen: Formas y comportamientos
Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 19 de 68.
Desafío
FácilEn 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:
- Definir una interfaz
Speakercon una firma de método:Speak()que devuelve una cadena - Definir un struct
Personcon un campoName(string) - Definir un struct
Parrotcon un campoName(string) - Implementar el método
Speak()para ambos structs:- Person debe devolver:
"Hello, I'm [name]" - Parrot debe devolver:
"Squawk! [name] says hello!"
- Person debe devolver:
- Crear una función llamada
makeAllSpeakque reciba un slice de interfacesSpeakercomo parámetro - Dentro de
makeAllSpeak, iterar a través del slice y llamar al métodoSpeak()en cada hablante, imprimiendo el resultado - Analizar las entradas para crear las instancias de hablantes apropiadas basadas en los tipos y nombres proporcionados
- Almacenar todos los hablantes en un slice de interfaces
Speaker - Llamar a
makeAllSpeakcon 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
1Flujo de control avanzado
Switch con `fallthrough`Salir de bucles anidadosContinuar un bucle específicoLa sentencia `goto`Repaso: Control de bucles avanzado4Proyecto: Lista de tareas sencilla
Configuración del proyectoAñadir una tarea2Estructuras y Métodos
Definición de métodos en estructurasReceptores de valorReceptores de punteroElegir receptoresMétodos vs FuncionesResumen - Comportamiento de estructuras5Mapas en profundidad
Mapas de StructsPunteros como valores de MapVerificación de Maps NilComparación de MapsResumen - Contador de frecuencia de palabras3Interfaces (Conceptos básicos)
¿Qué es una interfaz?Definir una interfazImplementar una interfazUso de tipos de interfazInterfaz vacíaAserciones de tipoType SwitchResumen: Formas y comportamientos