Recapitulação - Media Player
Parte da seção Object Oriented Programming do Journey de Rust da Coddy — lição 34 de 61.
Desafio
FácilVamos construir um sistema simples de player de mídia que demonstra como diferentes tipos de mídia podem compartilhar uma interface comum através de traits!
Você organizará seu código em três arquivos:
playable.rs: Defina uma trait públicaPlayablecom um métodoplay(&self)que imprime uma saída quando chamado. Esta trait representa a capacidade compartilhada que todos os tipos de mídia terão.media.rs: Crie duas structs públicas que implementam sua trait:Audio— com um campo públicotitle(String) que imprimePlaying audio: {title}quando reproduzidoVideo— com um campo públicotitle(String) que imprimePlaying video: {title}quando reproduzido
main.rs: Reúna seus módulos e crie instâncias de ambos os tipos de mídia usando as entradas fornecidas. Chame o métodoplayem cada uma para demonstrar como a mesma trait produz saídas diferentes com base no tipo de mídia.
Sua saída deve seguir este formato:
Playing audio: {audio_title}
Playing video: {video_title}Por exemplo, com as entradas Bohemian Rhapsody e The Matrix:
Playing audio: Bohemian Rhapsody
Playing video: The MatrixVocê receberá duas entradas: um título de áudio e um título de vídeo.
Experimente você mesmo
mod playable;
mod media;
use media::{Audio, Video};
use playable::Playable;
fn main() {
// Ler 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: Criar uma instância de Audio com audio_title
// TODO: Criar uma instância de Video com video_title
// TODO: Chamar play() em ambas as instâncias
}
Todas as lições de Object Oriented Programming
1Métodos e Comportamento
Introdução a Blocos de ImplementaçãoO Parâmetro SelfMétodos MutáveisFunções AssociadasMúltiplos Blocos de ImplementaçãoEncadeamento de MétodosRecapitulação - Ações de Retângulo4Projeto: Pet Virtual
Definindo o PetAlimentando o Pet7Traits Padrão
A Trait DebugA Trait DisplayClone e CopyTraits de IgualdadeRecapitulação - Ponto Imprimível10Projeto: Sistema de Documentos
A Trait DrawComponente de Texto2Encapsulamento e Módulos
Fundamentos de MódulosA Palavra-chave PublicCampos PrivadosGettersSettersRecapitulação - Cofre Seguro5Genéricos
Structs GenéricasMétodos GenéricosMúltiplos Tipos GenéricosFunções GenéricasRecapitulação - Ponto de Coordenada8Traits como Restrições
Sintaxe de Restrições de TraitRestrições MúltiplasA Cláusula WhereRetornando Tipos com TraitsRecapitulação - Impressora Genérica11Padrões de Projeto em Rust
Padrão NewtypeComposiçãoA Trait DropFrom e IntoRecapitulação - Mock de Smart Pointer3Enums Avançados
Enums com DadosMétodos em EnumsCorrespondência de Variantes de DadosO Enum Option RevisitadoRecapitulação - Enum Shape6Definição de Traits
O que é uma Trait?Implementando TraitsImplementações PadrãoSobrescrevendo PadrõesTraits com ParâmetrosRecapitulação - Media Player