irfo
Moderatör
- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Rust'ta hata yönetimi, "beklenmedik bir durum olduğunda programın çökmesi" ile "beklenen bir sorunun zarifçe yönetilmesi" arasında net bir çizgi çeker. Rust'ta istisnalar (exceptions) yoktur; bunun yerine iki ana mekanizma vardır: panic! ve Result.
Rust
4. Hatanın Yayılması (Error Propagation) ve
Bir fonksiyonda hata oluştuğunda, bu hatayı fonksiyonda çözmek yerine çağıran yere geri göndermek isteyebilirsiniz. Bunun için en modern ve şık yöntem
Rust
1. panic!: Geri Dönülemez Hatalar
panic! makrosu, programın devam edemeyeceği kadar kritik bir hata oluştuğunda kullanılır (Örn: Geçersiz bir bellek dizinine erişim veya kritik bir dosyanın eksikliği).- Ne yapar? Hata mesajını yazdırır, belleği temizler (unwinding) ve programı sonlandırır.
- Ne zaman kullanılır? Programın mantıksal olarak ilerleyemeyeceği "çıkmaz sokaklarda".
Kod:
fn main() {
panic!("Kritik hata: Yakıt tükendi!");
// Bu satırdan sonrası asla çalışmaz.
}
2. Result<T, E>: Kurtarılabilir Hatalar
Rust'ın kalbindeki hata yönetimi budur. Bir işlemin başarılı (Ok) veya başarısız (Err) olabileceğini ifade eden bir enum yapısıdır.Rust
Kod:
enum Result<T, E> {
Ok(T), // Başarı durumunda dönen veri
Err(E), // Hata durumunda dönen hata bilgisi
}
Örnek: Dosya Okuma
Rust
Kod:
use std::fs::File;
fn main() {
let dosya_sonucu = File::open("ayarlar.txt");
let _dosya = match dosya_sonucu {
Ok(dosya) => dosya,
Err(hata) => panic!("Dosya açılamadı: {:?}", hata),
};
}
3. Hata Yönetimini Kısaltan Araçlar: unwrap ve expect
Süreklimatch yazmak yorucu olabilir. Eğer bir işlemin başarısız olması durumunda programın çökmesinde sakınca yoksa şu metotlar kullanılır:.unwrap(): Eğer sonuçOkise içindeki değeri verir,Errisepanic!oluşturur..expect("Mesaj"):unwrapile aynıdır ancak hata durumunda sizin belirlediğiniz özel mesajı gösterir (Hata ayıklama için daha iyidir).
Kod:
let sayi: i32 = "42".parse().expect("Lütfen geçerli bir sayı girin!");
4. Hatanın Yayılması (Error Propagation) ve ? Operatörü
Bir fonksiyonda hata oluştuğunda, bu hatayı fonksiyonda çözmek yerine çağıran yere geri göndermek isteyebilirsiniz. Bunun için en modern ve şık yöntem ? operatörüdür.Rust
Kod:
use std::fs::File;
use std::io::{self, Read};
fn kullanıcı_adı_oku() -> Result<String, io::Error> {
let mut s = String::new();
// Eğer open veya read_to_string hata verirse, fonksiyon
// anında Err döner. Başarılı olursa değer 's' içine akar.
File::open("hello.txt")?.read_to_string(&mut s)?;
Ok(s)
}
Özet: Hangi Hatayı Seçmeli?
| Durum | Mekanizma | Yaklaşım |
| Kritik / Mantıksal Hata | panic! | Programı durdur. |
| Beklenen Sorunlar | Result<T, E> | Hatayı döndür ve yönetilmesini sağla. |
| Hızlı Prototipleme | .unwrap() | Şimdilik çalışsın, sonra düzelteceğim. |
| Üretim (Production) | ? Operatörü | Hataları hiyerarşik olarak yukarı ilet. |