irfo
Moderatör
- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Rust'ta Enums (Enumerations), bir değerin sadece belirli bir seçenek kümesinden biri olabileceğini ifade etmemizi sağlar. Ancak Rust'ın enum yapısı, diğer dillerden (C# veya Java gibi) çok daha güçlüdür; çünkü Rust'ta her bir enum seçeneği kendi içinde veri taşıyabilir.
Bu özellik, Rust'ı "Cebirsel Veri Tipleri" (Algebraic Data Types) dünyasına taşır.
Rust
enum Mesaj {
Cikis, // Veri yok
Hareket { x: i32, y: i32 }, // İsimlendirilmiş struct yapısı
Yaz(String), // Tek bir String
RenkDegistir(i32, i32, i32), // Tuple yapısı
}
Bu yapı sayesinde, farklı türdeki verileri tek bir tip (Mesaj) altında toplayıp güvenli bir şekilde yönetebilirsiniz.
Rust
enum Option<T> {
Some(T), // Bir değer var
None, // Bir değer yok
}
Eğer bir değişken Option<i32> tipindeyse, derleyici sizi o değeri kullanmadan önce "ya boşsa?" durumunu kontrol etmeye zorlar. Bu, binlerce çökme hatasını daha kod yazılırken engeller.
Rust
fn mesaj_isle(m: Mesaj) {
match m {
Mesaj::Cikis => println!("Çıkış yapılıyor..."),
Mesaj::Yaz(metin) => println!("Mesajınız: {}", metin),
Mesaj::Hareket { x, y } => println!("X: {}, Y: {} konumuna git", x, y),
_ => (), // Diğer tüm durumlar (RenkDegistir gibi) için hiçbir şey yapma
}
}
Rust
let favori_sayi: Option<i32> = Some(7);
// match yerine daha kısa:
if let Some(sayi) = favori_sayi {
println!("Favori sayım: {}", sayi);
}
Bu özellik, Rust'ı "Cebirsel Veri Tipleri" (Algebraic Data Types) dünyasına taşır.
1. Enum Tanımlama ve Veri Saklama
Basit bir enum sadece seçenekleri listelerken, gelişmiş bir enum her seçenek için farklı tipte veriler barındırabilir.Rust
enum Mesaj {
Cikis, // Veri yok
Hareket { x: i32, y: i32 }, // İsimlendirilmiş struct yapısı
Yaz(String), // Tek bir String
RenkDegistir(i32, i32, i32), // Tuple yapısı
}
Bu yapı sayesinde, farklı türdeki verileri tek bir tip (Mesaj) altında toplayıp güvenli bir şekilde yönetebilirsiniz.
2. Option<T>: Rust'ın "Null" Çözümü
Birçok dilde karşılaşılan "Null Pointer Exception" hataları, Rust'ta yoktur. Çünkü Rust'ta null değeri yoktur. Bunun yerine, bir değerin var olup olmadığını temsil eden standart Option enum'ı vardır:Rust
enum Option<T> {
Some(T), // Bir değer var
None, // Bir değer yok
}
Eğer bir değişken Option<i32> tipindeyse, derleyici sizi o değeri kullanmadan önce "ya boşsa?" durumunu kontrol etmeye zorlar. Bu, binlerce çökme hatasını daha kod yazılırken engeller.
3. Enum'ları Match ile Kullanmak
Enum'ların gerçek gücü, match ifadesi ile birleştiğinde ortaya çıkar. Rust, tüm seçenekleri (variants) kontrol ettiğinizden emin olmanızı sağlar.Rust
fn mesaj_isle(m: Mesaj) {
match m {
Mesaj::Cikis => println!("Çıkış yapılıyor..."),
Mesaj::Yaz(metin) => println!("Mesajınız: {}", metin),
Mesaj::Hareket { x, y } => println!("X: {}, Y: {} konumuna git", x, y),
_ => (), // Diğer tüm durumlar (RenkDegistir gibi) için hiçbir şey yapma
}
}
4. if let: Kısa Yoldan Kontrol
Bazen match kullanmak çok uzun gelebilir, özellikle sadece tek bir durumla (örneğin sadece Some ise) ilgileniyorsak:Rust
let favori_sayi: Option<i32> = Some(7);
// match yerine daha kısa:
if let Some(sayi) = favori_sayi {
println!("Favori sayım: {}", sayi);
}
Özet
- Enumlar, bir değerin farklı formlarda olabileceğini modeller.
- Veri Taşıma: Her varyant farklı tip ve miktarda veri saklayabilir.
- Option: Null hatalarını derleme zamanında bitiren "var/yok" mekanizmasıdır.
- Match: Enum varyantlarını ayıklamak için en güvenli yoldur.