Riepilogo: forme e comportamenti
Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 19 di 68.
Sfida
FacileIn questa sfida creerai un sistema di comunicazione che dimostra il polimorfismo attraverso le interfacce. Creerai un’interfaccia Speaker e la implementerai con tipi diversi, capaci di "speak" a modo loro.
Riceverai tre input:
- Una stringa che rappresenta il numero di speaker da creare (ad es.,
"3") - Una stringa contenente i tipi di speaker separati da virgole (ad es.,
"person,parrot,person") - Una stringa contenente i nomi degli speaker separati da virgole (ad es.,
"Alice,Polly,Bob")
Il tuo compito è:
- Definire un’interfaccia
Speakercon la firma di un metodo:Speak(), che restituisce una stringa - Definire una struct
Personcon un campoName(stringa) - Definire una struct
Parrotcon un campoName(stringa) - Implementare il metodo
Speak()per entrambe le struct:- Person dovrebbe restituire:
"Hello, I'm [name]" - Parrot dovrebbe restituire:
"Squawk! [name] says hello!"
- Person dovrebbe restituire:
- Creare una funzione chiamata
makeAllSpeakche accetta come parametro una slice di interfacceSpeaker - All’interno di
makeAllSpeak, scorrere la slice e chiamare il metodoSpeak()su ogni speaker, stampando il risultato - Analizzare gli input per creare le istanze di speaker appropriate in base ai tipi e ai nomi forniti
- Memorizzare tutti gli speaker in una slice di interfacce
Speaker - Chiamare
makeAllSpeakpassando la slice di speaker
Gli speaker dovrebbero essere creati nell’ordine in cui compaiono nell’input. Per esempio, se i tipi sono "person,parrot,person" e i nomi sono "Alice,Polly,Bob", crea una Person chiamata Alice, poi un Parrot chiamato Polly e infine una Person chiamata Bob. Questa sfida dimostra come tipi diversi possano essere trattati in modo uniforme attraverso un’interfaccia condivisa, mostrando la potenza del polimorfismo in Go.
Provalo tu
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
// Lee la entrada
var numSpeakersStr string
var speakerTypesStr string
var speakerNamesStr string
fmt.Scanln(&numSpeakersStr)
fmt.Scanln(&speakerTypesStr)
fmt.Scanln(&speakerNamesStr)
// Analiza la entrada
numSpeakers, _ := strconv.Atoi(numSpeakersStr)
speakerTypes := strings.Split(speakerTypesStr, ",")
speakerNames := strings.Split(speakerNamesStr, ",")
// TODO: Escribe tu código a continuación
// 1. Define la interfaz Speaker
// 2. Define las estructuras Person y Parrot
// 3. Implementa los métodos Speak() para ambas estructuras
// 4. Crea la función makeAllSpeak
// 5. Crea instancias de Speaker según la entrada y guárdalas en un slice
// 6. Llama a makeAllSpeak con tu slice
}Tutte le lezioni di Logica e flusso
1Flusso di controllo avanzato
Switch con `fallthrough`Uscire dai cicli annidatiContinuare un ciclo specificoL'istruzione `goto`Riepilogo - Controllo avanzato dei cicli4Progetto: semplice lista di attività
Configurazione del progettoAggiungere un’attività2Struct e metodi
Definire metodi sugli structReceiver per valoreReceiver con puntatoreScegliere i receiverMetodi vs funzioniRiepilogo - comportamento degli struct5Mappe in dettaglio
Mappe di structPuntatori come valori delle mappeVerificare le mappe nilConfrontare le mappeRiepilogo - Contatore della frequenza delle parole3Interfacce (le basi)
Che cos’è un’interfaccia?Definire un’interfacciaImplementare un’interfacciaUsare i tipi interfacciaInterfaccia vuotaAsserzioni di tipoSwitch di tipoRiepilogo: forme e comportamentiEsercitati da solo: Compilatore Go online