Buton Bileşeni
Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 51 / 61.
Görev
KolayDocument 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örevlerdekiDrawtrait'inizi koruyun.text_field.rs:TextFieldstruct'ınızı ve onunDrawuygulamasını koruyun.button.rs: İki public alana sahip birButtonstruct'ı oluşturun:label(birString) vewidth(biru32).DrawiçinButtontrait'ini uygulayın; böylecedraw()ç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 birTextFieldhem de birButtonoluşturun, ardından her iki bileşeni de görüntülemek için her birindedraw()ç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)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
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 PlayerKendi başına pratik yap: Online Rust derleyicisi