Menu
Coddy logo textTech

Riepilogo: forme e comportamenti

Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 19 di 68.

challenge icon

Sfida

Facile

In 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 è:

  1. Definire un’interfaccia Speaker con la firma di un metodo: Speak(), che restituisce una stringa
  2. Definire una struct Person con un campo Name (stringa)
  3. Definire una struct Parrot con un campo Name (stringa)
  4. Implementare il metodo Speak() per entrambe le struct:
    • Person dovrebbe restituire: "Hello, I'm [name]"
    • Parrot dovrebbe restituire: "Squawk! [name] says hello!"
  5. Creare una funzione chiamata makeAllSpeak che accetta come parametro una slice di interfacce Speaker
  6. All’interno di makeAllSpeak, scorrere la slice e chiamare il metodo Speak() su ogni speaker, stampando il risultato
  7. Analizzare gli input per creare le istanze di speaker appropriate in base ai tipi e ai nomi forniti
  8. Memorizzare tutti gli speaker in una slice di interfacce Speaker
  9. Chiamare makeAllSpeak passando 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

Esercitati da solo: Compilatore Go online