CodeBlanks Logo Icon CodeBlanks

Model iskeleti

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

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
#[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&lt;String&gt;</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ı

Soru
struct Yazi {
    id: u32,
    etiketler: ____,
}
Cevap
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

Orta seviye bölümündeki tüm dersler