Menu
Coddy logo textTech

Componente pulsante

Fa parte della sezione Programmazione orientata agli oggetti del percorso Rust di Coddy. Lezione 51 di 61.

challenge icon

Sfida

Facile

Continuiamo a costruire il nostro sistema di documenti aggiungendo un secondo componente dell’interfaccia utente: un Button. Proprio come TextField, questo componente implementerà il trait Draw, dimostrando come tipi diversi possano condividere un’interfaccia comune.

Espanderai il tuo progetto con un altro file di modulo:

  • draw.rs: Mantieni il trait Draw delle sfide precedenti.
  • text_field.rs: Mantieni la struct TextField e la sua implementazione di Draw.
  • button.rs: Crea una struct Button con due campi pubblici: label (una String) e width (un u32). Implementa il trait Draw per Button, in modo che chiamando draw() venga stampato il pulsante in questo formato: Button: {label} (width: {width})
  • main.rs: Includi tutti e tre i moduli. Crea sia un TextField sia un Button, poi chiama draw() su ciascuno per visualizzare entrambi i componenti.

Il tuo modulo button dovrà accedere al trait Draw usando crate::draw::Draw, proprio come hai fatto con TextField.

Verranno forniti i seguenti input:

  • Prima riga: il contenuto del campo di testo
  • Seconda riga: l’etichetta del pulsante
  • Terza riga: la larghezza del pulsante (come numero)

L'output dovrebbe mostrare prima il campo di testo, poi il pulsante, ciascuno sulla propria riga:

Text: Welcome
Button: Submit (width: 100)

Provalo tu

mod draw;
mod text_field;
mod button;

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

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 text_field = TextField { content };
    text_field.draw();

    // TODO: Crea un Button con `label` e `width`, poi chiama draw()
    
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Rust online