irfo
Moderatör
- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Rust'ta Iterator'lar (Yineleyiciler), bir koleksiyonun (vektörler, diziler, hashmapler) öğeleri üzerinde sırayla işlem yapmanızı sağlayan güçlü bir mekanizmadır. Rust'ın "Zero-cost Abstractions" felsefesinin en iyi örneklerinden biridir: Bu fonksiyonel yöntemleri kullanmak, elle yazılmış bir
Rust
A.
Her bir öğeye bir fonksiyon uygular ve yeni bir iterator döner.
Rust
B.
Belirli bir şartı sağlayan (true dönen) öğeleri tutar, diğerlerini eler.
Rust
C.
Tüm öğeleri birleştirerek tek bir sonuç üretir (Toplam, çarpım, string birleştirme vb.).
Rust
Rust
for döngüsüyle aynı hızda çalışır.1. Iterator Mantığı ve Tembel Çalışma (Lazy Evaluation)
Rust'ta iterator'lar tembeldir. Yani, siz onları tüketene kadar (bir sonuca dönüştürene kadar) hiçbir işlem yapmazlar.Rust
Kod:
let sayilar = vec![1, 2, 3];
let iter = sayilar.iter().map(|x| x + 1);
// Burada henüz hiçbir şey toplanmadı veya hesaplanmadı.
2. Temel Iterator Metotları
İşlemleri gerçekleştirmek için üç ana aşama vardır: Oluşturma, Dönüştürme (Adapters) ve Tüketme (Consumers).A. map: Her Öğeyi Dönüştürme
Her bir öğeye bir fonksiyon uygular ve yeni bir iterator döner.Rust
Kod:
let sayilar = vec![1, 2, 3];
let kareleri: Vec<_> = sayilar.iter().map(|x| x * x).collect();
// Sonuç: [1, 4, 9]
B. filter: Koşula Göre Seçme
Belirli bir şartı sağlayan (true dönen) öğeleri tutar, diğerlerini eler.Rust
Kod:
let sayilar = vec![1, 2, 3, 4, 5, 6];
let çiftler: Vec<_> = sayilar.into_iter().filter(|x| x % 2 == 0).collect();
// Sonuç: [2, 4, 6]
C. fold (veya reduce): Tek Bir Değere İndirgeme
Tüm öğeleri birleştirerek tek bir sonuç üretir (Toplam, çarpım, string birleştirme vb.).Rust
Kod:
let sayilar = vec![1, 2, 3, 4];
// fold(başlangıç_değeri, |akümülatör, öğe| ...)
let toplam = sayilar.iter().fold(0, |acc, x| acc + x);
// Sonuç: 10
3. Zincirleme İşlemler
Iterator'ların asıl gücü, bu metotları uç uca ekleyebilmenizden gelir. Okunabilirliği artırır ve karmaşık mantıkları basitleştirir.Rust
Kod:
let sayilar = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let sonuc: i32 = sayilar.iter()
.filter(|&&x| x % 2 == 0) // Çiftleri seç
.map(|&x| x * 10) // 10 ile çarp
.take(3) // İlk 3 tanesini al
.sum(); // Topla (bir consumer'dır)
// 20 + 40 + 60 = 120
4. İterasyon Türleri
Rust'ta bir koleksiyon üzerinde üç farklı şekilde iterator oluşturabilirsiniz:| Metot | Sahiplik (Ownership) | Tip |
.iter() | Ödünç alır (Immutable) | &T |
.iter_mut() | Ödünç alır (Mutable) | &mut T |
.into_iter() | Sahipliği devralır | T |