Menu
Coddy logo textTech

Ekranı Çalıştırma

Coddy'nin Rust Journey'sinin Object Oriented Programming 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ız için tebrikler! Tüm bireysel parçaları — Draw trait'ini, TextField, Button ve Screen yapılarını — oluşturdunuz. Şimdi Screen yapınıza, tek bir metot çağrısıyla tüm bileşenlerini aynı anda işleme (render) yeteneği kazandırma zamanı.

Projenizi, Screen struct'ına bir run metodu ekleyerek tamamlayacaksınız. Bu metot, ekranda saklanan tüm bileşenler üzerinde döngü kuracak ve her biri için draw() metodunu çağırarak tüm belge sisteminizi hayata geçirecektir.

Proje dosyalarınız:

  • draw.rs: draw metoduna sahip Draw trait'iniz.
  • text_field.rs: Text: {content} çıktısını veren TextField bileşeniniz.
  • button.rs: Button: {label} (width: {width}) çıktısını veren Button bileşeniniz.
  • screen.rs: new ve add metotlarına sahip Screen struct'ınız. &self alan ve koleksiyondaki her bileşen üzerinde draw() metodunu çağıran bir run metodu 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() metodunu çağırın.

run metodu, işleme mantığını Screen içinde kapsüller (encapsulate), böylece main fonksiyonunuzu temiz ve basit tutar. main içinde bileşenler üzerinde manuel olarak döngü kurmak yerine, sadece screen.run() çağrısı yaparsınız.

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

  • Birinci satır: metin alanının içeriği (content)
  • İkinci satır: butonun etiketi (label)
  • Üçüncü satır: butonun genişliği (width - sayı olarak)

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

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

Object Oriented Programming bölümündeki tüm dersler