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 birmatch
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.