Definir una interfaz
Parte de la sección Lógica y Flujo del Journey de GO de Coddy. Lección 13 de 68.
Ahora que entiendes conceptualmente qué son las interfaces, aprendamos a definir realmente una en Go. Una interfaz se define usando la palabra clave interface seguida de un conjunto de firmas de métodos encerradas entre llaves.
Esta es la sintaxis básica para definir una interfaz:
type InterfaceName interface {
MethodName() ReturnType
AnotherMethod(parameter Type) ReturnType
}Observa que una interfaz solo contiene firmas de métodos: el nombre del método, los parámetros y los tipos de retorno, pero no la implementación. La interfaz no especifica cómo deben funcionar estos métodos, solo qué métodos deben existir.
Por ejemplo, así definirías una interfaz Shaper simple que requiere que cualquier tipo que la implemente tenga un método Area:
type Shaper interface {
Area() float64
}Esta interfaz establece un contrato: cualquier tipo que quiera considerarse un Shaper debe tener un método Area que no acepte parámetros y devuelva un float64. A la interfaz no le importa cuál sea el tipo ni cómo calcule el área; solo le importa que el método exista con la firma correcta.
Desafío
FácilEn este desafío, practicarás la definición de interfaces en Go creando un sistema sencillo de reproductor multimedia. Definirás una interfaz que establece un contrato para diferentes tipos de dispositivos multimedia.
Recibirás una entrada:
- Una cadena que representa una acción multimedia (por ejemplo,
"play","pause"o"stop")
Tu tarea es:
- Definir una interfaz llamada
MediaPlayercon tres firmas de método:Play()que devuelve una cadenaPause()que devuelve una cadenaStop()que devuelve una cadena
- Según la acción de entrada, imprimir la firma de método correspondiente de tu interfaz
MediaPlayercon el formato:"MediaPlayer interface requires: [MethodName]() string"
La instrucción de impresión está destinada a reflejar la interfaz que definiste anteriormente. Estás describiendo qué firma de método requiere la interfaz MediaPlayer para la acción indicada. Piensa en ello como si tu programa inspeccionara e informara sobre su propio contrato de interfaz.
Los nombres de los métodos deben escribirse con mayúscula inicial (exportados), ya que forman parte de una definición de interfaz. Para la entrada "play", imprime "MediaPlayer interface requires: Play() string"; para "pause", imprime "MediaPlayer interface requires: Pause() string"; y para "stop", imprime "MediaPlayer interface requires: Stop() string".
Este desafío se centra en el concepto fundamental de definir interfaces con firmas de método, estableciendo el contrato que cualquier tipo que las implemente debe cumplir.
Pruébalo tú mismo
package main
import "fmt"
func main() {
// Leer la entrada
var action string
fmt.Scanln(&action)
// TODO: Define your MediaPlayer interface here
// TODO: Escribe tu código a continuación para manejar la acción e imprimir la salida requerida
// Imprimir el resultado
// Remember to print in format: "MediaPlayer interface requires: [MethodName]() string"
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
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 comportamientosPractica por tu cuenta: Compilador de Go online