Buton Bileşeni
Coddy'nin Rust Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 51 / 61.
Görev
Kolayİkinci bir kullanıcı arayüzü (UI) bileşeni olan Button'ı ekleyerek Belge Sistemimizi oluşturmaya devam edelim. Tıpkı TextField gibi, bu bileşen de Draw trait'ini uygulayacak ve farklı türlerin ortak bir arayüzü nasıl paylaşabileceğini gösterecektir.
Projenizi başka bir modül dosyasıyla genişleteceksiniz:
draw.rs: Önceki görevlerdekiDrawtrait'inizi koruyun.text_field.rs:TextFieldstruct'ınızı ve onunDrawuygulamasını koruyun.button.rs: İki genel (public) alana sahip birButtonstruct'ı oluşturun:label(birString) vewidth(biru32).ButtoniçinDrawtrait'ini uygulayın, böylecedraw()çağrıldığında butonu şu formatta yazdırsın:Button: {label} (width: {width})main.rs: Her üç modülü de dahil edin. Hem birTextFieldhem de birButtonoluşturun, ardından her iki bileşeni de işlemek (render) için her birindedraw()fonksiyonunu çağırın.
button modülünüzün, tıpkı TextField'da yaptığınız gibi crate::draw::Draw kullanarak Draw trait'ine erişmesi gerekecektir.
Aşağıdaki girdiler sağlanacaktır:
- Birinci satır: metin alanının (text field) içeriği
- İkinci satır: butonun etiketi (label)
- Üçüncü satır: butonun genişliği (sayı olarak)
Çıktınız önce metin alanını, ardından butonu, her biri kendi satırında olacak şekilde görüntülemelidir:
Text: Welcome
Button: Submit (width: 100)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
}Object Oriented Programming bölümündeki tüm dersler
1Metotlar ve Davranış
Uygulama Bloklarına GirişSelf ParametresiDeğiştirilebilir Metotlarİlişkili FonksiyonlarBirden Fazla Uygulama BloğuMetot ZincirlemeÖzet - Dikdörtgen Eylemleri4Proje: Sanal Evcil Hayvan
Evcil Hayvanı TanımlamaEvcil Hayvanı Besleme2Kapsülleme ve Modüller
Modül TemelleriPublic Anahtar KelimesiPrivate AlanlarGetter'larSetter'larÖzet - Güvenli Kasa5Generic Yapılar
Generic Struct'larGeneric MetotlarÇoklu Generic TürlerGeneric FonksiyonlarÖzet - Koordinat Noktası8Sınırlandırıcı Olarak Trait'ler
Trait Sınırlandırıcı SözdizimiÇoklu SınırlandırıcılarWhere CümleciğiTrait'ler ile Tip DöndürmeÖzet - Generic Yazıcı11Rust'ta Tasarım Kalıpları
Newtype KalıbıKompozisyonDrop Trait'iFrom ve IntoÖzet - Smart Pointer Mock3İleri Seviye Enum'lar
Veri İçeren Enum'larEnum MetotlarıVeri Varyantlarını EşlemeOption Enum'ına Yeniden BakışÖzet - Shape Enum6Trait Tanımlama
Trait Nedir?Traitleri UygulamaVarsayılan UygulamalarVarsayılanları Geçersiz KılmaParametreli TraitlerÖzet - Media Player