Model iskeleti
- Rust kursu
- Orta seviye
- Ders 107/115
- 6 dk
Post struct'ına serde derive ekleyerek modeli kurarsın.
Blog projesi: model
Bu projede blog yazılarını bir dosyadan okuyan, süzen ve komut satırından sorgulanabilen küçük bir araç yazacağız. Gerçek bir projede yazılar JSON'dan serde ile okunur ve komutlar clap ile ayrıştırılır; alıştırmalarda aynı adımları standart kütüphaneyle kuracağız. İlk adım veri modeli:
#[derive(Debug, Clone, Serialize, Deserialize)]
struct Yazi {
id: u32,
konu: String,
yazar: String,
etiketler: Vec<String>,
yayinda: bool,
}Clone, süzme sonuçlarını bağımsız kopyalar olarak döndürmek gerektiğinde işe yarar.
Örnek oluşturmak
Test ve örnek veri için kısa bir yardımcı kullanılabilir:
let y = Yazi {
id: 1,
konu: String::from("Rust ile başlangıç"),
yazar: String::from("ece"),
etiketler: vec![String::from("rust")],
yayinda: true,
};
println!("{:?}", y);{:?} çıktısı alanları tanım sırasıyla gösterir; hata ayıklamada modeli doğrulamanın en hızlı yoludur.
Uygulama Yazı modeli
Yukarıdaki Yazi struct'ını #[derive(Debug, Clone)] ile tanımla. id: 1, "Rust ile başlangıç", "ece", ["rust"], true olan bir yazı oluştur ve {:?} ile yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
#[derive(Debug, Clone)]
struct Yazi {
id: u32,
konu: String,
yazar: String,
etiketler: Vec<String>,
yayinda: bool,
}
fn main() {
let y = Yazi {
id: 1,
konu: String::from("Rust ile başlangıç"),
yazar: String::from("ece"),
etiketler: vec![String::from("rust")],
yayinda: true,
};
println!("{:?}", y);
}Beklenen çıktı
Yazi { id: 1, konu: "Rust ile başlangıç", yazar: "ece", etiketler: ["rust"], yayinda: true }
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Etiketler için neden <code>Vec<String></code> seçildi?
- Bir yazının sıfır ya da çok sayıda etiketi olabilir ve yazı kendi verisine sahip olmalı Doğru cevap
- Etiketler sayıdır
- String tek etiket tutamaz
- serde yalnızca Vec okur
Açıklama: Vec<&str> kullansaydık yazı, metnin başka bir yerde yaşamasına bağımlı olurdu.
2 Etiket alanı
struct Yazi {
id: u32,
etiketler: ____,
}
struct Yazi {
id: u32,
etiketler: Vec<String>,
}
Açıklama: Çok sayıda, sahip olunan metin için Vec<String> kullanılır.
3 Alan ve türü
| Kavram | Anlamı |
|---|---|
id |
u32 |
konu |
String |
etiketler |
Vec<String> |
yayinda |
bool |