Menu
Coddy logo textTech

Ejecución de la pantalla

Parte de la sección Object Oriented Programming del Journey de Rust de Coddy. Lección 53 de 61.

challenge icon

Desafío

Fácil

¡Felicitaciones por llegar al paso final del proyecto Document System! Has creado todas las piezas individuales: el trait Draw, TextField, Button y Screen. Ahora es momento de darle a tu Screen la capacidad de renderizar todos sus components a la vez con una single llamada al method.

Completarás tu proyecto agregando un method run al Screen struct. Este method recorrerá todos los components almacenados en el screen y llamará a draw() en cada uno, dando vida a todo tu sistema de documentos.

Tus archivos del proyecto:

  • draw.rs: Tu trait Draw con el method draw.
  • text_field.rs: Tu component TextField que imprime Text: {content}.
  • button.rs: Tu component Button que imprime Button: {label} (width: {width}).
  • screen.rs: Tu Screen struct con los methods new y Add. Agrega un method run que takes &self y llama a draw() en cada component de la colección.
  • main.rs: Reúne todo: crea un Screen, agrega tus components y llama a run() para renderizar todo el screen de una vez.

El method run encapsula la lógica de renderizado dentro de Screen, lo que hace que tu función main sea limpia y sencilla. En lugar de recorrer manualmente los components en main, simplemente llamas a screen.run().

Se proporcionarán las siguientes entradas:

  • Primera línea: el content del campo de texto
  • Segunda línea: el label del button
  • Tercera línea: el width del button (como número)

Tu salida debe mostrar cada component en su propia línea, en el orden en que se agregaron:

Text: Dashboard
Button: Save (width: 120)
FORMATO DE SALIDA REQUERIDO: [Tu contenido traducido aquí]

Pruébalo tú mismo

mod draw;
mod text_field;
mod button;
mod screen;

use draw::Draw;
use text_field::TextField;
use button::Button;
use screen::Screen;

pub struct Label {
    pub text: String,
}

impl Draw for Label {
    fn draw(&self) {
        println!("{}", self.text);
    }
}

fn main() {
    let mut input1 = String::new();
    std::io::stdin().read_line(&mut input1).expect("Failed to read line");
    let content = input1.trim().to_string();

    let mut input2 = String::new();
    std::io::stdin().read_line(&mut input2).expect("Failed to read line");
    let label = input2.trim().to_string();

    let mut input3 = String::new();
    std::io::stdin().read_line(&mut input3).expect("Failed to read line");
    let width: u32 = input3.trim().parse().expect("Failed to parse width");

    let mut screen = Screen::new();

    let text_field = TextField { content };
    screen.add(Box::new(text_field));

    let button = Button { label, width };
    screen.add(Box::new(button));

    // TODO: Reemplaza la iteración manual de abajo con una sola llamada a screen.run()
    for component in &screen.components {
        component.draw();
    }
}

Todas las lecciones de Object Oriented Programming

Practica por tu cuenta: Compilador de Rust online