Componente de Texto
Parte da seção Programação Orientada a Objetos do Journey de Rust da Coddy. Lição 50 de 61.
Desafio
FácilCom base no trait Draw que você criou na lição anterior, vamos adicionar nosso primeiro componente de UI real: um TextField. Esse componente representará um elemento de exibição de texto em nosso sistema de documentos.
Você expandirá seu projeto com um novo arquivo de módulo:
draw.rs: mantenha seu traitDrawdo desafio anterior.text_field.rs: crie uma structTextFieldcom um campo públicocontent(umString). Implemente o traitDrawparaTextFieldpara que chamardraw()imprima o texto em um formato específico:Text: {content}main.rs: inclua ambos os módulos e crie uma instância deTextField. Chame seu métododraw()para renderizar o componente.
Lembre-se de que seu módulo text_field precisa usar o trait Draw do módulo draw. Você pode acessá-lo com crate::draw::Draw, pois ambos os módulos fazem parte do mesmo crate.
A seguinte entrada será fornecida:
- Uma string representando o conteúdo do campo de texto
Sua saída deve seguir exatamente este formato:
Text: Hello WorldExperimente você mesmo
mod draw;
mod text_field;
use draw::Draw;
pub struct Label {
pub text: String,
}
impl Draw for Label {
fn draw(&self) {
println!("{}", self.text);
}
}
fn main() {
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let content = input.trim().to_string();
// TODO: Criar uma instância de TextField e chamar draw() nela
}Todas as lições de Programação Orientada a Objetos
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 PlayerPratique por conta própria: Compilador de Rust online