Enums: Çok Biçimli Veri Yapıları ve Option Tipi

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

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.


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&lt;i32&gt; 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.
 
Geri
Üst