Menu
Coddy logo textTech

Komponent przycisku

Część sekcji Programowanie obiektowe ścieżki Rust w Coddy. Lekcja 51 z 61.

challenge icon

Wyzwanie

Łatwy

Kontynuujmy budowanie naszego systemu dokumentów, dodając drugi komponent interfejsu użytkownika: Button. Podobnie jak TextField, ten komponent będzie implementował cechę Draw, pokazując, jak różne typy mogą korzystać ze wspólnego interfejsu.

Rozbudujesz projekt o kolejny plik modułu:

  • draw.rs: Zachowaj cechę Draw z poprzednich wyzwań.
  • text_field.rs: Zachowaj strukturę TextField i jej implementację cechy Draw.
  • button.rs: Utwórz strukturę Button z dwoma publicznymi polami: label (typu String) i width (typu u32). Zaimplementuj cechę Draw dla Button tak, aby wywołanie draw() wypisywało przycisk w tym formacie: Button: {label} (width: {width})
  • main.rs: Dołącz wszystkie trzy moduły. Utwórz zarówno TextField, jak i Button, a następnie wywołaj draw() dla każdego z nich, aby wyświetlić oba komponenty.

Moduł button będzie musiał uzyskać dostęp do cechy Draw za pomocą crate::draw::Draw, tak jak w przypadku TextField.

Dane wejściowe będą następujące:

  • Pierwszy wiersz: zawartość pola tekstowego
  • Drugi wiersz: etykieta przycisku
  • Trzeci wiersz: szerokość przycisku (jako liczba)

Wynik powinien wyświetlać najpierw pole tekstowe, a następnie przycisk, każdy w osobnym wierszu:

Text: Welcome
Button: Submit (width: 100)

Spróbuj swoich sił

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: Utwórz Button z `label` i `width`, a następnie wywołaj draw()
    
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Rust online