Resumen - Reproductor multimedia
Parte de la sección Object Oriented Programming del Journey de Rust de Coddy — lección 34 de 61.
Desafío
Fácil¡Vamos a construir un sistema de reproductor de medios simple que demuestre cómo diferentes tipos de medios pueden compartir una interfaz común a través de traits!
Organizarás tu código en tres archivos:
playable.rs: Define un trait públicoPlayablecon un métodoplay(&self)que imprima una salida cuando se llame. Este trait representa la capacidad compartida que tendrán todos los tipos de medios.media.rs: Crea dos structs públicos que implementen tu trait:Audio— con un campo públicotitle(String) que imprimaPlaying audio: {title}cuando se reproduzcaVideo— con un campo públicotitle(String) que imprimaPlaying video: {title}cuando se reproduzca
main.rs: Une tus módulos y crea instancias de ambos tipos de medios utilizando las entradas proporcionadas. Llama al métodoplayen cada uno para demostrar cómo el mismo trait produce diferentes salidas según el tipo de medio.
Tu salida debe seguir este formato:
Playing audio: {audio_title}
Playing video: {video_title}Por ejemplo, con las entradas Bohemian Rhapsody y The Matrix:
Playing audio: Bohemian Rhapsody
Playing video: The MatrixRecibirás dos entradas: un título de audio y un título de video.
Pruébalo tú mismo
mod playable;
mod media;
use media::{Audio, Video};
use playable::Playable;
fn main() {
// Leer entrada
let mut audio_title = String::new();
std::io::stdin().read_line(&mut audio_title).expect("Failed to read line");
let audio_title = audio_title.trim().to_string();
let mut video_title = String::new();
std::io::stdin().read_line(&mut video_title).expect("Failed to read line");
let video_title = video_title.trim().to_string();
// TODO: Crear una instancia de Audio con audio_title
// TODO: Crear una instancia de Video con video_title
// TODO: Llamar a play() en ambas instancias
}
Todas las lecciones de Object Oriented Programming
1Métodos y Comportamiento
Intro a Bloques de ImplementaciónEl Parámetro SelfMétodos MutablesFunciones AsociadasMúltiples Bloques de ImplementaciónEncadenamiento de MétodosResumen - Acciones de Rectángulo4Proyecto: Mascota virtual
Definir la mascotaAlimentar a la mascota7Traits estándar
El trait DebugEl trait DisplayClone y CopyTraits de igualdadResumen - Punto imprimible10Proyecto: Sistema de documentos
El Trait DrawComponente de texto2Encapsulamiento y módulos
Conceptos básicos de módulosLa palabra clave PublicCampos privadosGettersSettersRepaso - Casillero seguro5Genéricos
Estructuras genéricasMétodos genéricosMúltiples tipos genéricosFunciones genéricasResumen - Punto de coordenadas8Traits como límites
Sintaxis de límites de traitsLímites múltiplesLa cláusula whereRetornar tipos con traitsResumen: Impresora genérica11Patrones de diseño en Rust
Patrón NewtypeComposiciónEl Trait DropFrom e IntoResumen - Mock de Smart Pointer3Enums avanzados
Enums con datosMétodos en EnumsCoincidencia de variantes de datosEl Enum Option revisitadoResumen - Enum Shape6Definición de Traits
¿Qué es un Trait?Implementación de TraitsImplementaciones por defectoSobrescribir valores por defectoTraits con parámetrosResumen - Reproductor multimedia