Componente de texto
Parte de la sección Object Oriented Programming del Journey de Rust de Coddy — lección 50 de 61.
Desafío
FácilBasándonos en el trait Draw que creaste en la lección anterior, vamos a añadir nuestro primer componente de interfaz de usuario real: un TextField. Este componente representará un elemento de visualización de texto en nuestro sistema de documentos.
Ampliarás tu proyecto con un nuevo archivo de módulo:
draw.rs: Mantén tu traitDrawdel desafío anterior.text_field.rs: Crea una estructuraTextFieldcon un campo públicocontent(unString). Implementa el traitDrawparaTextFieldde modo que al llamar adraw()se imprima el texto en un formato específico:Text: {content}main.rs: Incorpora ambos módulos y crea una instancia deTextField. Llama a su métododraw()para renderizar el componente.
Recuerda que tu módulo text_field necesita usar el trait Draw del módulo draw. Puedes acceder a él con crate::draw::Draw ya que ambos módulos forman parte del mismo crate.
Se proporcionará la siguiente entrada:
- Una cadena que representa el contenido del campo de texto
Tu salida debe seguir este formato exacto:
Text: Hello WorldPruébalo tú mismo
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: Crear una instancia de TextField y llamar a draw() en ella
}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