CodeBlanks Logo Icon CodeBlanks

Özet - Numaralandırmalar

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

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

Örnek çözüm

main.rs
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'ı

Soru
let x: Option<i32> = ____(4);
Cevap
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

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