panic!
- Rust kursu
- Başlangıç
- Ders 107/115
- 4 dk
panic! ile kurtarılamaz hataları öğrenirsin.
panic!
panic! programın kurtarılamaz bir duruma girdiğini bildirir: mesaj yazılır, yığın geri sarılır (unwind) ve iş parçacığı sonlanır. Bazı işlemler kendiliğinden panic verir:
let v = vec![1, 2, 3];
// v[10]; // index out of bounds
// let x: u8 = 255; x + 1; // debug derlemede taşma
panic!("yapılandırma bozuk: {}", "port eksik");RUST_BACKTRACE=1 cargo run panic anındaki çağrı zincirini gösterir.
unwind ve abort
Varsayılan olarak panic yığını geri sarar ve her değerin drop'unu çalıştırır. Daha küçük ikili dosya için doğrudan sonlandırma seçilebilir:
# Cargo.toml
[profile.release]
panic = "abort"Ayrıca unreachable!(), todo!() ve assert!(kosul) da koşula göre panic veren makrolardır; assert_eq!(a, b) testlerde sık kullanılır.
Uygulama Ön koşul
fn ikiye_katla(n: i32) -> i32 yaz: n < 0 ise panic!("negatif değer: {}", n), değilse n * 2 döndürsün. ikiye_katla(5) sonucunu yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn ikiye_katla(n: i32) -> i32 {
if n < 0 {
panic!("negatif değer: {}", n);
}
n * 2
}
fn main() {
println!("{}", ikiye_katla(5));
}Beklenen çıktı
10
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hangisi panic için uygun bir durumdur?
- Kullanıcının yanlış şifre girmesi
- Ağ bağlantısının kopması
- Dosyanın bulunamaması
- Mantıken imkânsız olması gereken bir durumun gerçekleşmesi Doğru cevap
Açıklama: Beklenen, kullanıcı ya da çevre kaynaklı hatalar Result ile ele alınmalı; panic program hataları içindir.
2 Koşullu panic
____(n >= 0, "n negatif olamaz: {}", n);
assert!(n >= 0, "n negatif olamaz: {}", n);
Açıklama: assert! koşul false olduğunda verilen mesajla panic verir.
3 Makro ve kullanım yeri
| Kavram | Anlamı |
|---|---|
panic!(..) |
Kurtarılamaz hata |
assert!(..) |
Koşul denetimi |
todo!() |
Henüz yazılmadı |
unreachable!() |
Olmaması gereken kol |