- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Rust'ta Traits (Özellikler), farklı veri tiplerinin (struct, enum vb.) sahip olabileceği ortak davranışları tanımlayan bir yapıdır. Diğer dillerdeki "Interface" (Arayüz) kavramına çok benzer ancak Rust'ın tip sisteminde çok daha derin ve güçlü bir rol oynar.
Bir trait, "Bu tipi kullananlar şu fonksiyonları uygulamak zorundadır" diyen bir sözleşmedir.
Rust
Şimdi bu özelliği farklı struct'lara uygulayalım:
Rust
Rust
Rust
Bu yapı, kodunuzu inanılmaz derecede esnek kılar. Fonksiyonunuzun içine
Bir trait, "Bu tipi kullananlar şu fonksiyonları uygulamak zorundadır" diyen bir sözleşmedir.
1. Trait Tanımlama ve Uygulama
Diyelim ki farklı türdeki içeriklerin (Haber ve Tweet) özetini çıkarmak istiyoruz. Önce bu davranışı tanımlayan bir trait oluştururuz:Rust
Kod:
pub trait Ozet {
fn ozet_al(&self) -> String;
}
Rust
Kod:
pub struct Haber {
pub baslik: String,
pub yazar: String,
pub icerik: String,
}
impl Ozet for Haber {
fn ozet_al(&self) -> String {
format!("{}, yazan: {}", self.baslik, self.yazar)
}
}
pub struct Tweet {
pub kullanici_adi: String,
pub icerik: String,
}
impl Ozet for Tweet {
fn ozet_al(&self) -> String {
format!("{}: {}", self.kullanici_adi, self.icerik)
}
}
2. Varsayılan Metotlar (Default Implementations)
Trait içinde bir metodun gövdesini yazarak varsayılan bir davranış belirleyebilirsiniz. Eğer struct bu metodu kendi içinde tekrar tanımlamazsa varsayılan olan kullanılır.Rust
Kod:
pub trait Ozet {
fn ozet_al(&self) -> String {
String::from("(Daha fazla oku...)") // Varsayılan davranış
}
}
3. Parametre Olarak Trait (Trait Bounds)
Trait'lerin asıl gücü, fonksiyonları belirli tiplere değil, belirli özelliklere sahip tiplere göre yazabilmemizi sağlamasıdır.Rust
Kod:
// "Ozet özelliğini uygulayan herhangi bir tipi kabul et"
pub fn haber_kaynas(item: &impl Ozet) {
println!("Yeni haber! {}", item.ozet_al());
}
Haber mi yoksa Tweet mi geldiğiyle ilgilenmezsiniz; sadece ozet_al metoduna sahip olup olmadığına bakarsınız.4. Standart Trait'ler (Derivable Traits)
Rust, en yaygın davranışlar için önceden tanımlanmış trait'ler sunar. Bunları#[derive(...)] özniteliği ile otomatik olarak struct'ınıza ekleyebilirsiniz:Debug:{:?}ile formatlı yazdırmayı sağlar.PartialEq: İki örneği==ile karşılaştırmayı sağlar.Clone/Copy: Verinin kopyalanma davranışını belirler.
Kod:
#[derive(Debug, PartialEq)]
struct Nokta {
x: i32,
y: i32,
}
5. Trait vs Interface: Temel Farklar
| Özellik | Interface (Java/C#) | Trait (Rust) |
| Uygulama | Sınıf tanımlanırken belirtilir. | Herhangi bir struct için her zaman (dışarıdan bile) uygulanabilir. |
| Varsayılan Metot | Kısıtlı destek. | Tam destek. |
| Çakışma Yönetimi | İsim çakışmaları zor çözülür. | Spesifik metot çağırma (Fully Qualified Syntax) ile kolayca çözülür. |