- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Rust programlamada fonksiyonlar kodun yapı taşlarını oluştururken, Pattern Matching (Kalıp Eşleştirme) bu taşları birleştiren en güçlü harçtır. Rust’ın match ifadesi, diğer dillerdeki switch-case yapısına benzese de çok daha güvenli ve yeteneklidir.
Ancak birden fazla koşulun olduğu durumlarda if-else blokları karmaşıklaşabilir. İşte burada Rust'ın asıl gücü olan Pattern Matching devreye girer.
1. Rust’ta Fonksiyon Tanımlama
Rust’ta fonksiyonlar fn anahtar kelimesi ile tanımlanır. İsimlendirme kuralı olarak snake_case (küçük harf ve alt tire) kullanılır.
Kod:
fn main() {
println!("Sonuç: {}", topla(5, 10));
}
fn topla(sayi1: i32, sayi2: i32) -> i32 {
sayi1 + sayi2 // Semicolon yoksa bu bir "return" ifadesidir.
}
Parametreler ve Dönüş Değerleri
- Parametreler: Fonksiyon tanımlanırken her parametrenin tipi açıkça belirtilmelidir.
- Dönüş Tipi: -> işaretinden sonra belirtilir.
- İfadeler (Expressions) vs Komutlar (Statements): Rust'ta bir fonksiyonun son satırına ; koymazsanız, o satır fonksiyonun dönüş değeri olur. Açıkça return anahtar kelimesini de kullanabilirsiniz, ancak son satırda kullanmamak daha yaygın bir Rust tarzıdır.
2. Kontrol Akışı: if ve else
Rust’ta if bir komut değil, bir ifadedir. Yani bir if bloğunun sonucunu bir değişkene atayabilirsiniz.
Kod:
let sayi = 3;
let durum = if sayi > 5 { "Büyük" } else { "Küçük" };
Ancak birden fazla koşulun olduğu durumlarda if-else blokları karmaşıklaşabilir. İşte burada Rust'ın asıl gücü olan Pattern Matching devreye girer.
3. Pattern Matching: Match İfadesi
match ifadesi, bir değeri bir dizi kalıpla karşılaştırmanıza ve eşleşen koda göre işlem yapmanıza olanak tanır. En önemli kuralı şudur: Kapsamlı (Exhaustive) olmalıdır. Yani olası tüm ihtimalleri değerlendirmek zorundasınız.
Kod:
let plaka = 34;
match plaka {
1 => println!("Adana"),
6 => println!("Ankara"),
34 => println!("İstanbul"),
_ => println!("Diğer Şehirler"), // Diğer tüm durumları kapsar (default)
}
Neden match kullanmalıyız?
Eğer bir enum (numaralandırma) yapısı kullanıyorsanız, match sizi tüm varyasyonları kontrol etmeye zorlar. Bir durumu unuttuğunuzda kodunuz derlenmez. Bu, çalışma zamanında oluşabilecek "unuttuğumuz bir koşul yüzünden programın çökmesi" hatasını tamamen ortadan kaldırır.4. Option ve Result: Hataları Match ile Yönetmek
Rust’ta null değeri yoktur. Bunun yerine bir değerin var olup olmadığını belirten Option enum yapısı vardır.
Kod:
let veri: Option<i32> = Some(5);
match veri {
Some(i) => println!("Sayı: {}", i),
None => println!("Veri bulunamadı!"),
}
5. if let: Kısa Yol Kalıp Eşleştirme
Bazen sadece tek bir durumla ilgileniriz ve diğer tüm durumları görmezden gelmek isteriz. Bu gibi durumlarda match yazmak yerine daha sade olan if let yapısını kullanırız.
Kod:
let bazi_deger = Some(3);
// Sadece Some(3) ise işlem yap
if let Some(3) = bazi_deger {
println!("Şanslı sayı bulundu!");
}
6. Pattern Matching'de Diğer Yetenekler
Pattern matching sadece basit değerlerle sınırlı değildir:- Aralıklar: 1..=5 => println!("1 ile 5 arasında")
- Birden Fazla Kalıp: 3 | 5 | 7 => println!("Tek rakamlar")
- Değişken Bağlama: Kalıp içindeki bir değeri yakalayıp kod bloğunda kullanabilirsiniz.