Ekran Struct'ı
Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 52 / 61.
Görev
KolayŞimdi tüm UI bileşenlerinizi bir araya getirmenin zamanı geldi! Trait nesnelerini kullanarak farklı çizilebilir bileşenlerden oluşan bir koleksiyonu tutabilen bir Screen struct'ı oluşturacaksınız. Vec<Box<dyn Draw>> yapısının gücü burada gerçekten ortaya çıkıyor: birden fazla bileşen türünü yöneten tek bir koleksiyon.
Büyüyen projenize yeni bir modül ekleyeceksiniz:
draw.rs: Önceki görevlerdekiDrawtrait'iniz.text_field.rs:TextFieldyazdıranText: {content}bileşeniniz.button.rs:ButtonyazdıranButton: {label} (width: {width})bileşeniniz.screen.rs:Screentüründe,componentsadlı herkese açık bir alan tutan birVec<Box<dyn Draw>>struct'ı oluşturun. Boş bir ekran oluşturan birnewilişkili işlevi ve biraddalan ve bunu components vektörüne ekleyen birBox<dyn Draw>metodu uygulayın.main.rs: Tüm modülleri bir araya getirin. BirScreenoluşturun, buna birTextFieldve birButtonekleyin, ardından ekranın bileşenleri üzerinde yineleme yaparak her biri içindraw()çağrısını gerçekleştirin.
Screen trait nesnelerini depolamalıdır; bu nedenle dyn trait'iyle birlikte Draw anahtar sözcüğünü kullanacaksınız. add metodu, components vektörünü değiştirdiği için &mut self almalıdır.
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: Hello
Button: Click Me (width: 80)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");
// TODO: Screen::new() kullanarak bir Screen oluştur
// TODO: Ekrana Box::new() ile sarılmış bir TextField ekle
// TODO: Ekrana Box::new() ile sarılmış bir Button ekle
// TODO: screen.components üzerinde dolaş ve her bileşende draw() çağır
}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