Menu
Coddy logo textTech

Ekranı Çalıştırma

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

challenge icon

Görev

Kolay

Belge Sistemi projesinin son adımına ulaştığın için tebrikler! Tüm ayrı parçaları oluşturdun: Draw özelliği, TextField, Button ve Screen. Şimdi Screen bileşenlerinin tümünü tek bir yöntem çağrısıyla aynı anda işleyebilme yeteneği kazandırmanın zamanı geldi.

Projenizi run yapısına bir Screen yöntemi ekleyerek tamamlayacaksınız. Bu yöntem, ekranda saklanan tüm bileşenler üzerinde yineleme yapacak ve her biri için draw() çağrısı gerçekleştirerek tüm belge sisteminizi hayata geçirecek.

Proje dosyalarınız:

  • draw.rs: Draw yöntemine sahip draw özelliğ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 ve new yöntemlerine sahip add yapınız. run alan ve koleksiyondaki her bileşen için &self çağrısı yapan bir draw() yöntemi ekleyin.
  • main.rs: Her şeyi bir araya getirin: bir Screen oluşturun, bileşenlerinizi ekleyin ve tüm ekranı tek seferde işlemek için run() çağrısı yapın.

run yöntemi, işleme mantığını Screen içinde kapsüller ve böylece ana işlevinizi temiz ve basit tutar. main içinde bileşenler üzerinde manuel olarak yineleme yapmak yerine yalnızca screen.run() çağrısı yaparsınız.

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: Dashboard
Button: Save (width: 120)

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

    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: Aşağıdaki manuel iterasyonu tek bir screen.run() çağrısıyla değiştirin
    for component in &screen.components {
        component.draw();
    }
}

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

Kendi başına pratik yap: Online Rust derleyicisi