Ekran Struct'ı
Coddy'nin Rust Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 52 / 61.
Görev
KolayŞimdi tüm kullanıcı arayüzü bileşenlerinizi bir araya getirme zamanı! Trait nesnelerini kullanarak farklı çizilebilir bileşenlerden oluşan bir koleksiyonu tutabilen bir Screen struct'ı oluşturacaksınız. Burası Vec<Box<dyn Draw>> yapısının gücünün gerçekten parladığı yerdir; 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:Text: {content}çıktısını verenTextFieldbileşeniniz.button.rs:Button: {label} (width: {width})çıktısını verenButtonbileşeniniz.screen.rs:Vec<Box<dyn Draw>>türünde genel (public) bircomponentsalanı tutan birScreenstruct'ı oluşturun. Boş bir ekran oluşturan birnewilişkili fonksiyonu ve birBox<dyn Draw>alıp bunu bileşenler vektörüne ekleyen biraddmetodu uygulayın.main.rs: Tüm modülleri bir araya getirin. BirScreenoluşturun, ona birTextFieldve birButtonekleyin, ardından ekranın bileşenleri üzerinde gezinin ve her biri içindraw()metodunu çağırın.
Screen yapınızın trait nesnelerini saklaması gerekir, bu nedenle Draw trait'inizle birlikte dyn anahtar kelimesini kullanacaksınız. add metodu, bileşenler vektörünü değiştirdiği için &mut self almalıdır.
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: 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şturun
// TODO: Ekrana Box::new() içine sarılmış bir TextField ekleyin
// TODO: Ekrana Box::new() içine sarılmış bir Button ekleyin
// TODO: screen.components üzerinde döngü kurun ve her bileşen için draw() metodunu ç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