CodeBlanks Logo Icon CodeBlanks

Örnek oluşturma

Struct örneği (instance) oluşturmayı ve alanlara erişmeyi öğrenirsin.

Örnek oluşturma

Örnek oluştururken her alana değer verilmelidir; sıra önemli değildir. Değişken adı alan adıyla aynıysa kısaltma (field init shorthand) kullanılır:

fn yeni_oyuncu(ad: String) -> Oyuncu {
    Oyuncu {
        ad,          // ad: ad
        puan: 0,
        aktif: true,
    }
}

Eksik bir alan "missing field" derleme hatasıdır; Rust'ta varsayılan değer otomatik atanmaz.

Debug ile yazdırma

Struct'lar varsayılan olarak {} ya da {:?} ile yazdırılamaz. #[derive(Debug)] eklenince {:?} tek satır, {:#?} girintili çıktı verir:

#[derive(Debug)]
struct Oyuncu { ad: String, puan: u32, aktif: bool }

let o = yeni_oyuncu(String::from("Ali"));
println!("{:?}", o);
// Oyuncu { ad: "Ali", puan: 0, aktif: true }

dbg!(&o) ise dosya ve satır bilgisiyle birlikte stderr'e yazar.

Uygulama Kurucu fonksiyon

#[derive(Debug)] ile Oyuncu { ad: String, puan: u32, aktif: bool } tanımla. fn yeni_oyuncu(ad: String) -> Oyuncu alan kısaltmasıyla puan: 0, aktif: true ayarlasın. "Ali" için oluşturup {:?} ile yazdır.

Başlangıç kodu

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

Örnek çözüm

main.rs
#[derive(Debug)]
struct Oyuncu {
    ad: String,
    puan: u32,
    aktif: bool,
}

fn yeni_oyuncu(ad: String) -> Oyuncu {
    Oyuncu {
        ad,
        puan: 0,
        aktif: true,
    }
}

fn main() {
    let o = yeni_oyuncu(String::from("Ali"));
    println!("{:?}", o);
}

Beklenen çıktı

Oyuncu { ad: "Ali", puan: 0, aktif: true }

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>Oyuncu { ad, puan: 0 }</code> (aktif yok) derlenir mi?

  • Evet, aktif tanımsız kalır
  • Yalnızca uyarı verir
  • Hayır: aktif alanı eksik Doğru cevap
  • Evet, aktif false olur

Açıklama: Tüm alanlar başlatılmalıdır. Varsayılan istiyorsan #[derive(Default)] ve ..Default::default() kullanılır.

2 Debug türet

Soru
#[derive(____)]
struct Oyuncu {
    ad: String,
}
Cevap
#[derive(Debug)]
struct Oyuncu {
    ad: String,
}

Açıklama: derive(Debug), {:?} biçimini otomatik üretir.

3 Yazım ve anlamı

Kavram Anlamı
Oyuncu { ad, .. } Kısaltma ile alan
#[derive(Debug)] {:?} desteği
{:#?} Girintili çıktı
dbg!(&o) stderr'e yazar

Başlangıç bölümündeki tüm dersler

16 Proje: Yapılacaklar listesi

  1. Görev modeli
  2. Ekleme
  3. Listeleme
  4. İşaretleme
  5. Komut okuma