Rustda Güçlü ve Verimli Veri İşleme: Iteratorlarla Tanışın!
[en] Read in English 2024-04-15
Rust dilinde iteratorler, koleksiyonlar üzerinde gezinmek ve üzerlerinde işlemler yapmak için kullanılan yapılar arasında yer alır. Iteratorlar, veri koleksiyonlarının elemanlarına erişmek ve bu elemanlar üzerinde işlemler yapabilmek için kullanılır. Rust’ın sahiplik ve ödünç verme kuralları ile entegre şekilde çalıştıkları için güvenli ve etkili bir kullanım sunarlar.
Iterator Tanımlama ve Kullanma
Iterator’ı kullanmanın temel yolu .iter()
, .iter_mut()
, ve .into_iter()
metodlarıdır. Bu metodlar, koleksiyonun sahiplik durumuna göre değişir:
.iter()
: Koleksiyonun immutable referansları üzerinden iterasyon yapar. Koleksiyonun orijinaline dokunmadan elemanlarına erişirsiniz..iter_mut()
: Mutable referanslar ile iterasyon yapar. Bu sayede koleksiyonun elemanları üzerinde değişiklik yapabilirsiniz..into_iter()
: Koleksiyonun sahipliğini alarak iterasyon yapar. Bu, koleksiyonu tüketir ve elemanları üzerinde sahiplik hakkıyla işlem yapmanıza izin verir.
Basit Bir Örnek
İlk örneğimizde bir vektör üzerinde iterasyon yaparak elemanlarını yazdıralım:
let numbers = vec![1, 2, 3, 4, 5];
for num in numbers.iter() {
println!("{}", num);
}
Değişiklik Yapma
Mutable referanslar ile elemanlar üzerinde değişiklik yapabiliriz:
let mut numbers = vec![1, 2, 3, 4, 5];
for num in numbers.iter_mut() {
*num += 1; // Her elemana 1 ekle
}
println!("{:?}", numbers); // Çıktı: [2, 3, 4, 5, 6]
Sahiplik ile Iterasyon
Sahiplik alarak koleksiyon üzerinde iterasyon yapalım:
let numbers = vec![1, 2, 3, 4, 5];
let doubled: Vec<_> = numbers.into_iter().map(|num| num * 2).collect();
println!("{:?}", doubled); // Çıktı: [2, 4, 6, 8, 10]
Genel Iterator Metodları
Rust iteratorleri, birçok kullanışlı metoda sahiptir, bunlardan bazıları şunlardır:
.map()
: Elemanları belirli bir fonksiyon ile dönüştürür..filter()
: Bir koşula göre elemanları süzer..fold()
: Tüm elemanları bir başlangıç değeri ile birleştirerek tek bir değere indirger.
Örnek: map
ve filter
Kombinasyonu
Bir sayı listesinden sadece çift sayıları alıp, her birini iki katına çıkaralım:
let numbers = vec![1, 2, 3, 4, 5];
let processed: Vec<_> = numbers.iter()
.filter(|&&x| x % 2 == 0)
.map(|&x| x * 2)
.collect();
println!("{:?}", processed); // Çıktı: [4, 8]
Iteratorlerle ilgili daha fazla öğrenmek ve pratik yapmak, Rust’ı etkili bir şekilde kullanmanın anahtarlarından biridir. Rust belgeleri ve topluluk kaynakları, bu konuda daha derinlemesine bilgi edinmek için mükemmel kaynaklardır.