Özet - Numaralandırmalar
- Rust kursu
- Başlangıç
- Ders 82/115
- 5 dk
Veri taşıyan enum ve Option'ı birleştirerek bir ip adresi türü yazarsın.
Numaralandırmalar özeti
Enum, bir değerin sabit seçeneklerden biri olduğunu ifade eder. Variant'lar veri taşımayabilir, tuple ya da struct biçiminde veri taşıyabilir. match tüm variant'ları ele almayı zorunlu kılar. Option<T> (Some/None) null'ın yerini alır; unwrap_or, map, is_some gibi yardımcılarla kullanılır. Enum'lara impl ile metot eklenebilir.
Enum'a metot
Veri taşıyan enum'larda metot, match self ile her variant için ayrı hesap yapar:
enum Sekil {
Daire(f64),
Kare(f64),
}
impl Sekil {
fn alan(&self) -> f64 {
match self {
Sekil::Daire(r) => std::f64::consts::PI * r * r,
Sekil::Kare(a) => a * a,
}
}
}Yeni bir şekil eklendiğinde derleyici alan metodunu güncellemen gerektiğini söyler.
Uygulama Şekil alanları
Yukarıdaki Sekil enum'ını ve alan metodunu yaz. Sekil::Daire(1.0) ve Sekil::Kare(2.0) alanlarını {:.2} biçimiyle boşlukla ayırarak yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
enum Sekil {
Daire(f64),
Kare(f64),
}
impl Sekil {
fn alan(&self) -> f64 {
match self {
Sekil::Daire(r) => std::f64::consts::PI * r * r,
Sekil::Kare(a) => a * a,
}
}
}
fn main() {
println!("{:.2} {:.2}", Sekil::Daire(1.0).alan(), Sekil::Kare(2.0).alan());
}Beklenen çıktı
3.14 4.00
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir <code>enum Sekil { Daire(f64), Kare(f64) }</code> değerinin bellekteki boyutu neye göre belirlenir?
- En büyük variant + ayırt edici etiket Doğru cevap
- Tüm variant'ların toplamı
- Her zaman 1 bayt
- Çalışma anında değişir
Açıklama: Enum değeri aynı anda tek variant olduğu için en büyüğüne yer ayrılır, yanında da hangi variant olduğunu gösteren etiket tutulur.
2 Option variant'ı
let x: Option<i32> = ____(4);
let x: Option<i32> = Some(4);
Açıklama: Değer varsa Some içine sarılır.
3 Grubun özeti
| Kavram | Anlamı |
|---|---|
enum A { X, Y } |
Seçenek kümesi |
B::X(5) |
Veri taşıyan variant |
Option<T> |
Null yerine |
match self |
Variant'a göre metot |