Örnek oluşturma
- Rust kursu
- Başlangıç
- Ders 66/115
- 4 dk
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
fn main() {
// buraya yaz
}Örnek çözüm
#[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
#[derive(____)]
struct Oyuncu {
ad: String,
}
#[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 |