- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Yazılım geliştirmede veri modelleme, karmaşık problemleri bilgisayarın anlayabileceği düzenli yapılara dönüştürme sanatıdır. Rust, bu sanatı icra etmeniz için size iki temel araç sunar: Structs (Yapılar) ve Enums (Numaralandırmalar).
C tabanlı dillerden geliyorsanız bu kavramlar tanıdık gelebilir; ancak Rust, bunlara eklediği sahiplik ve örüntü eşleştirme (pattern matching) özellikleri ile veri modellemeyi çok daha güvenli bir seviyeye taşır.
Eğer bir fonksiyon bir değer döndüremeyebilir ise, tipi Option<i32> olur. Derleyici, bu değeri kullanmadan önce None durumunu kontrol etmeniz için sizi zorlar. Bu, Rust’ın neden bu kadar güvenli olduğunun temel kanıtlarından biridir.
C tabanlı dillerden geliyorsanız bu kavramlar tanıdık gelebilir; ancak Rust, bunlara eklediği sahiplik ve örüntü eşleştirme (pattern matching) özellikleri ile veri modellemeyi çok daha güvenli bir seviyeye taşır.
1. Structs (Yapılar): İlişkili Verileri Gruplama
struct, farklı veri tiplerini tek bir anlamlı paket içinde toplamanızı sağlar. Bir nesnenin özelliklerini tanımlamak için kullanılır.İsimlendirilmiş Alan Yapıları (Classic Structs)
En yaygın kullanılan yapı türüdür. Her alanın bir ismi ve tipi vardır.
Kod:
struct Kullanici {
kullanici_adi: String,
eposta: String,
aktif: bool,
giris_sayisi: u64,
}
fn main() {
let mut kullanici1 = Kullanici {
eposta: String::from("[email protected]"),
kullanici_adi: String::from("ali123"),
aktif: true,
giris_sayisi: 1,
};
kullanici1.eposta = String::from("[email protected]");<br>
}
Tuple Structs ve Unit-Like Structs
Bazen alanlara isim vermek yerine sadece tipleri gruplamak istersiniz (Tuple Struct). Bazen de üzerinde hiç veri taşımayan, sadece bir tip belirten yapılar kurarsınız (Unit-Like Struct).
Kod:
struct Renk(i32, i32, i32); // Tuple Struct
struct GecerliVeri; // Unit-Like Struct
let siyah = Renk(0, 0, 0);
2. Metotlar: Yapılara Davranış Kazandırma
Bir struct sadece veri tutmaz, aynı zamanda o veri üzerinde çalışan fonksiyonlara (metotlara) da sahip olabilir. Bunun için impl (implementation) bloğu kullanılır.
Kod:
struct Dikdortgen {
genislik: u32,
yukseklik: u32,
}
impl Dikdortgen {
// &self, bu metodun yapının kendisine eriştiğini belirtir
fn alan_hesapla(&self) -> u32 {
self.genislik * self.yukseklik
}
}
3. Enums (Numaralandırmalar): Olasılıkları Modelleme
enum, bir değerin bir grup varyanttan biri olabileceğini belirtir. Rust’ın enum yapısı, diğer dillerden farklı olarak her bir varyantın içinde veri taşımasına izin verir. Bu, Rust’ı veri modellemede inanılmaz esnek kılar.
Kod:
enum Mesaj {
Cikis, // Veri yok
Yaz(String), // String taşıyor
Hareket { x: i32, y: i32 }, // Struct gibi veri taşıyor
RenkDegistir(i32, i32, i32), // Tuple gibi veri taşıyor
}
Enum ve Match Birlikteliği
Enum'lar, match ifadesiyle birlikte kullanıldığında tam bir "su sızdırmaz" mantık kurmanızı sağlar.
Kod:
fn mesaj_isle(m: Mesaj) {
match m {
Mesaj::Cikis => println!("Oturum kapatılıyor."),
Mesaj::Yaz(s) => println!("Mesaj içeriği: {}", s),
Mesaj::Hareket { x, y } => println!("Koordinat: x={}, y={}", x, y),
_ => (), // Diğer durumları boş geç
}
}
4. Option Enum: Rust’ın Milyar Dolarlık Hataya Çözümü
Birçok dilde bir değerin "yokluğu" null veya nil ile ifade edilir. Bu durum genellikle çalışma zamanı çökmelerine (NullPointerException) neden olur. Rust’ta null yoktur; bunun yerine standart kütüphanede tanımlı Option enum'u vardır.
Kod:
enum Option<T> {
Some(T),
None,
}
Eğer bir fonksiyon bir değer döndüremeyebilir ise, tipi Option<i32> olur. Derleyici, bu değeri kullanmadan önce None durumunu kontrol etmeniz için sizi zorlar. Bu, Rust’ın neden bu kadar güvenli olduğunun temel kanıtlarından biridir.
5. Struct ve Enum Kombinasyonu: Gerçek Dünya Örneği
Bir e-ticaret sistemindeki ödeme yöntemlerini modelleyelim:
Kod:
struct OdemeBilgisi {
miktar: f64,
birim: String,
}
enum OdemeYontemi {
Nakit,
KrediKarti(String), // Kart numarası
Kripto(String), // Cüzdan adresi
}
struct Islem {
bilgi: OdemeBilgisi,
yontem: OdemeYontemi,
}
Özet
- Structs: "Ve" (AND) ilişkisidir. Bir kullanıcı adı ve e-postası olan bir yapı oluşturursunuz.
- Enums: "Veya" (OR) ilişkisidir. Ödeme nakit veya kredi kartı olabilir.
- Metotlar: Veriyi işleyen mantığı verinin yanına (impl) koymanızı sağlar.
- Güvenlik: Enum varyantlarını match ile kontrol etmek, hata payını sıfıra indirir.