Structs: Veriyi Gruplandırma ve Nesne Modelleri Oluşturma

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

irfo

Moderatör
Top Poster Of Month
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.


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.
 
Geri
Üst