Enumlar

Demetler (tuples) gibi, enum’lar da eşleştirme yoluyla çözümlenebilir (destructured):

Desenler, değişkenleri değerlerinizin parçalarına bağlamak için de kullanılabilir. Türlerinizin yapısını bu şekilde inceleyebilirsiniz. Basit bir enum türüyle başlayalım:

enum Result {
    Ok(i32),
    Err(String),
}

fn divide_in_two(n: i32) -> Result {
    if n % 2 == 0 {
        Result::Ok(n / 2)
    } else {
        Result::Err(format!("{n} iki eşit parçaya bölünemez"))
    }
}

fn main() {
    let n = 100;
    match divide_in_two(n) {
        Result::Ok(half) => println!("{n} ikiye bölündüğünde {half}"),
        Result::Err(msg) => println!("üzgünüm, bir hata oluştu: {msg}"),
    }
}

Burada Result değerini çözümlemek (destructure) için kolları (arm) kullandık. İlk kolda, half, Ok varyantının içindeki değere bağlanır. İkinci kolda, msg hata mesajına bağlanır.

This slide should take about 4 minutes.
  • if/else ifadesi, daha sonra bir match ile açılan (unpacked) bir enum geri döndürüyor.
  • Enum tanımına üçüncü bir varyant eklemeyi ve kodu çalıştırırken hataları göstermeyi deneyebilirsiniz. Kodunuzun artık kapsayıcı olmadığı (inexhaustive) yerlere ve derleyicinin size nasıl ipuçları vermeye çalıştığına dikkat çekin.
  • Enum varyantlarındaki değerlere yalnızca desen eşleştirmesi yapıldıktan sonra erişilebilir.
  • Aramanın kapsayıcı olmadığında (inexhaustive) ne olduğunu gösterin. Rust derleyicisinin tüm durumların ele alındığını onaylayarak sağladığı avantaja dikkat edin.
  • Enum tanımına ve match’e bir tane ekleyerek yapı stili (struct-style) bir varyant için sözdizimini (syntax) gösterin. Bunun sözdizimsel olarak bir yapı (struct) üzerinde eşleştirmeye (matching) nasıl benzediğine dikkat çekin.