Menu
Coddy logo textTech

Buton Bileşeni

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

challenge icon

Görev

Kolay

Document System'ımızı oluşturmaya, ikinci bir kullanıcı arayüzü bileşeni olan bir Button ekleyerek devam edelim. Tıpkı TextField gibi bu bileşen de Draw trait'ini uygulayarak farklı türlerin ortak bir arayüzü nasıl paylaşabileceğini gösterecek.

Projenizi başka bir modül dosyasıyla genişleteceksiniz:

  • draw.rs: Önceki görevlerdeki Draw trait'inizi koruyun.
  • text_field.rs: TextField struct'ınızı ve onun Draw uygulamasını koruyun.
  • button.rs: İki public alana sahip bir Button struct'ı oluşturun: label (bir String) ve width (bir u32). Draw için Button trait'ini uygulayın; böylece draw() çağrıldığında düğme şu formatta yazdırılsın: Button: {label} (width: {width})
  • main.rs: Üç modülün tamamını dahil edin. Hem bir TextField hem de bir Button oluşturun, ardından her iki bileşeni de görüntülemek için her birinde draw() çağrısı yapın.

button modülünüzün, tıpkı Draw ile yaptığınız gibi, crate::draw::Draw kullanarak TextField trait'ine erişmesi gerekecek.

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ızda önce metin alanı, ardından düğme gösterilmeli ve her biri kendi satırında yer almalıdır:

Text: Welcome
Button: Submit (width: 100)
GEREKLİ ÇIKTI BİÇİMİ: [Çevrilmiş içeriğiniz burada]

Kendin dene

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: `label` ve `width` ile bir Button oluşturun, ardından draw() fonksiyonunu çağırın
    
}

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

Kendi başına pratik yap: Online Rust derleyicisi