- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Rust'ta Structs (Yapılar), farklı veri tiplerini anlamlı bir bütün oluşturacak şekilde bir araya getirmenizi sağlar. Nesne yönelimli dillerdeki "Class" yapısına benzerler; ancak Rust'ta struct'lar sadece veri saklar, davranışlar (metotlar) ise impl blokları ile dışarıdan eklenir.
Rust
struct Kullanici {
aktif: bool,
kullanici_adi: String,
email: String,
giris_sayisi: u64,
}
fn main() {
let mut kullanici1 = Kullanici {
aktif: true,
kullanici_adi: String::from("rustacean123"),
email: String::from("[email protected]"),
giris_sayisi: 1,
};
kullanici1.email = String::from("[email protected]");
}
Rust
struct Renk(i32, i32, i32);
struct Nokta(i32, i32, i32);
let siyah = Renk(0, 0, 0);
let orijin = Nokta(0, 0, 0); // Renk ile Nokta tipi karıştırılamaz!
Rust
struct Dikdortgen {
genislik: u32,
yukseklik: u32,
}
impl Dikdortgen {
// Alan hesaplayan bir metot
fn alan(&self) -> u32 {
self.genislik * self.yukseklik
}
// İlişkili fonksiyon (Statik metot gibi çalışır)
fn kare(boyut: u32) -> Self {
Self { genislik: boyut, yukseklik: boyut }
}
}
fn main() {
let rect = Dikdortgen { genislik: 30, yukseklik: 50 };
println!("Alan: {} birimkare", rect.alan());
let sq = Dikdortgen::kare(10);
}
Rust
let kullanici2 = Kullanici {
email: String::from("[email protected]"),
..kullanici1 // Diğer tüm alanları kullanici1'den kopyala/taşı
};
1. Struct Tanımlama ve Örneklendirme
Bir struct tanımlarken her bir parçaya field (alan) denir. Rust'ta üç çeşit struct vardır:A. Classic C-Style Struct
En yaygın kullanılan, alanların isimle belirtildiği yapıdır.Rust
struct Kullanici {
aktif: bool,
kullanici_adi: String,
email: String,
giris_sayisi: u64,
}
fn main() {
let mut kullanici1 = Kullanici {
aktif: true,
kullanici_adi: String::from("rustacean123"),
email: String::from("[email protected]"),
giris_sayisi: 1,
};
kullanici1.email = String::from("[email protected]");
}
B. Tuple Struct
Alan isimleri yoktur, sadece tipler vardır. Birbirine benzeyen ama farklı anlam taşıyan veri grupları için idealdir.Rust
struct Renk(i32, i32, i32);
struct Nokta(i32, i32, i32);
let siyah = Renk(0, 0, 0);
let orijin = Nokta(0, 0, 0); // Renk ile Nokta tipi karıştırılamaz!
C. Unit-Like Struct
Hiçbir alanı yoktur. Genellikle generic tiplerde bir özellik (trait) belirtmek için boş işaretçi olarak kullanılırlar.2. Metotlar ve
Struct verileri üzerinde işlem yapan fonksiyonlara metot denir. Metotlar, struct bağlamı içinde tanımlanır ve ilk parametreleri her zaman self olur.Rust
struct Dikdortgen {
genislik: u32,
yukseklik: u32,
}
impl Dikdortgen {
// Alan hesaplayan bir metot
fn alan(&self) -> u32 {
self.genislik * self.yukseklik
}
// İlişkili fonksiyon (Statik metot gibi çalışır)
fn kare(boyut: u32) -> Self {
Self { genislik: boyut, yukseklik: boyut }
}
}
fn main() {
let rect = Dikdortgen { genislik: 30, yukseklik: 50 };
println!("Alan: {} birimkare", rect.alan());
let sq = Dikdortgen::kare(10);
}
3. Struct'larda Sahiplik (Ownership)
Bir struct'ın içindeki veriler, struct'ın kendisine aittir. Eğer struct içine bir referans (&str gibi) koymak isterseniz, Rust sizden Lifetimes (Yaşam Süreleri) belirtmenizi ister. Bu yüzden başlangıç aşamasında struct alanlarında String kullanmak daha kolay ve güvenlidir.4. Kullanışlı Özellikler: Update Syntax
Bir struct örneğinden yola çıkarak, sadece birkaç alanını değiştirip geri kalanını aynı tutarak yeni bir örnek oluşturabilirsiniz:Rust
let kullanici2 = Kullanici {
email: String::from("[email protected]"),
..kullanici1 // Diğer tüm alanları kullanici1'den kopyala/taşı
};
Özet
- Classic Struct: İsimlendirilmiş alanlar, tam veri modelleri için.
- Tuple Struct: İsimsiz alanlar, basit gruplamalar için.
- impl: Davranışları (metotları) veriden ayırarak eklemek için.
- Self: Struct'ın kendi tipine atıfta bulunmak için kullanılır.