A Trait Draw
Parte da seção Object Oriented Programming do Journey de Rust da Coddy — lição 49 de 61.
Desafio
FácilVamos começar a construir um Sistema de Documentos! Neste projeto, você criará um framework flexível para renderizar componentes de UI usando trait objects. A base começa com a definição de uma trait Draw em seu próprio arquivo de módulo.
Você criará dois arquivos para organizar seu código:
draw.rs: Defina uma trait públicaDrawcom um único método chamadodrawque recebe&selfe imprime a saída. Esta trait servirá como o contrato que todos os componentes de UI devem cumprir.main.rs: Importe seu módulodrawe crie uma struct simples chamadaLabelcom um campo públicotext(umaString). Implemente a traitDrawparaLabelde modo que a chamada dedraw()imprima o texto da label.
Em sua função main, crie uma instância de Label e chame seu método draw() para exibir o texto.
A seguinte entrada será fornecida:
- Uma string representando o texto da label
Sua saída deve ser exatamente o texto da label em uma única linha.
Experimente você mesmo
mod draw;
use draw::Draw;
// TODO: Defina uma struct pública chamada Label com um campo text público (String)
// TODO: Implemente a trait Draw para Label
// O método draw deve imprimir o text da label
fn main() {
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let text = input.trim().to_string();
// TODO: Crie uma instância de Label com o text de entrada
// TODO: Chame o método draw() na label
}
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