- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Rust'ta Generic Types (Genel Tipler), kodunuzu belirli bir veri tipine hapsetmek yerine, birden fazla tiple çalışabilen esnek ve yeniden kullanılabilir yapılar oluşturmanızı sağlar. Generic'ler sayesinde aynı mantığı
Performans açısından en önemli nokta şudur: Rust, generic yapıları derleme aşamasında özelleştirir (monomorphization), bu yüzden çalışma zamanında (runtime) hiçbir performans kaybı yaşanmaz.
Rust
Rust
Eğer
Rust
Ayrıca, sadece belirli tipler için geçerli olan metotlar da yazabilirsiniz. Örneğin, sadece
Rust
Örneğin, siz
i32, f64 veya kendi oluşturduğunuz bir struct için ayrı ayrı yazmak zorunda kalmazsınız.Performans açısından en önemli nokta şudur: Rust, generic yapıları derleme aşamasında özelleştirir (monomorphization), bu yüzden çalışma zamanında (runtime) hiçbir performans kaybı yaşanmaz.
1. Fonksiyonlarda Generic Kullanımı
Bir fonksiyonun farklı tiplerle çalışmasını istiyorsanız, fonksiyon isminden sonra<T> (genellikle Type'ın baş harfi kullanılır) ifadesini eklersiniz.Rust
Kod:
// T herhangi bir tipi temsil eder
fn ekrana_bas<T: std::fmt::Display>(oge: T) {
println!("Değer: {}", oge);
}
fn main() {
ekrana_bas(5); // i32 ile çalışır
ekrana_bas("Selam"); // &str ile çalışır
}
Not: Yukarıdaki: std::fmt::Displaykısmı bir Trait Bound'dur. Derleyiciye "T her şey olabilir ama ekrana basılabilir (Display özelliği olan) bir şey olmalı" deriz.
2. Struct Yapılarında Generic
Bir struct'ın içinde farklı tiplerde veriler saklamak istediğinizde generic'ler hayat kurtarır.Rust
Kod:
struct Nokta<T> {
x: T,
y: T,
}
fn main() {
let tam_sayi = Nokta { x: 5, y: 10 };
let ondalikli = Nokta { x: 1.0, y: 4.0 };
// let hata = Nokta { x: 5, y: 4.0 }; // HATA! x ve y aynı T tipi olmalı.
}
x ve y değerlerinin farklı tiplerde olabilmesini istiyorsanız, iki farklı generic parametre kullanmalısınız: struct Nokta<T, U> { x: T, y: U }.3. Enum Yapılarında Generic
Aslında Rust'ın en meşhur iki yapısı, generic enum'lardır. Bunları her gün kullanıyoruz:Option<T>:Some(T)veyaNonedöner. İçindeki değer her tipte olabilir.Result<T, E>: İşlem başarılıysaTtipinde veri, başarısızsaEtipinde hata döner.
4. Metot Tanımlarında Generic
Generic bir struct için metot yazarken,impl anahtar kelimesinden sonra da tipi belirtmeniz gerekir.Rust
Kod:
impl<T> Nokta<T> {
fn x_degerini_al(&self) -> &T {
&self.x
}
}
f32 olan noktalar için bir metot:Rust
Kod:
impl Nokta<f32> {
fn orijine_uzaklik(&self) -> f32 {
(self.x.powi(2) + self.y.powi(2)).sqrt()
}
}
5. Performans: Monomorphization
"Genel bir tip kullanmak programı yavaşlatır mı?" sorusunun cevabı Rust için **"Hayır"**dır. Derleyici, kodunuzda kullanılan her somut tip için generic kodun bir kopyasını oluşturur.Örneğin, siz
Nokta<T> yazıp hem i32 hem f64 kullandığınızda, Rust derleyicisi arka planda iki farklı struct (Nokta_i32 ve Nokta_f64) varmış gibi makine kodu üretir. Bu sayede statik tipli dillerin hızını generic esnekliğiyle birleştirir.Özet
| Yapı | Amacı |
<T> | "Herhangi bir tip" anlamına gelen yer tutucu. |
| Esneklik | Aynı kodun farklı veri tipleriyle çalışmasını sağlar. |
| Güvenlik | Derleme zamanında tip kontrolü devam eder. |
| Performans | Monomorphization sayesinde çalışma zamanı yükü sıfırdır. |