Menu
Coddy logo textTech

Ekran Struct'ı

Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 52 / 61.

challenge icon

Görev

Kolay

Şimdi tüm UI bileşenlerinizi bir araya getirmenin zamanı geldi! Trait nesnelerini kullanarak farklı çizilebilir bileşenlerden oluşan bir koleksiyonu tutabilen bir Screen struct'ı oluşturacaksınız. Vec<Box<dyn Draw>> yapısının gücü burada gerçekten ortaya çıkıyor: birden fazla bileşen türünü yöneten tek bir koleksiyon.

Büyüyen projenize yeni bir modül ekleyeceksiniz:

  • draw.rs: Önceki görevlerdeki Draw trait'iniz.
  • text_field.rs: TextField yazdıran Text: {content} bileşeniniz.
  • button.rs: Button yazdıran Button: {label} (width: {width}) bileşeniniz.
  • screen.rs: Screen türünde, components adlı herkese açık bir alan tutan bir Vec<Box<dyn Draw>> struct'ı oluşturun. Boş bir ekran oluşturan bir new ilişkili işlevi ve bir add alan ve bunu components vektörüne ekleyen bir Box<dyn Draw> metodu uygulayın.
  • main.rs: Tüm modülleri bir araya getirin. Bir Screen oluşturun, buna bir TextField ve bir Button ekleyin, ardından ekranın bileşenleri üzerinde yineleme yaparak her biri için draw() çağrısını gerçekleştirin.

Screen trait nesnelerini depolamalıdır; bu nedenle dyn trait'iyle birlikte Draw anahtar sözcüğünü kullanacaksınız. add metodu, components vektörünü değiştirdiği için &mut self almalıdır.

Aşağıdaki girdiler sağlanacaktır:

  • İlk satır: metin alanının içeriği
  • İkinci satır: düğmenin etiketi
  • Üçüncü satır: düğmenin genişliği (sayı olarak)

Çıktınız, her bileşeni eklendikleri sırayla kendi satırında göstermelidir:

Text: Hello
Button: Click Me (width: 80)

Kendin dene

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");

    // TODO: Screen::new() kullanarak bir Screen oluştur
    // TODO: Ekrana Box::new() ile sarılmış bir TextField ekle
    // TODO: Ekrana Box::new() ile sarılmış bir Button ekle
    // TODO: screen.components üzerinde dolaş ve her bileşende draw() çağır
}

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Rust derleyicisi