CodeBlanks Logo Icon CodeBlanks

panic!

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

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
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

Soru
____(n >= 0, "n negatif olamaz: {}", n);
Cevap
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

Başlangıç bölümündeki tüm dersler

16 Proje: Yapılacaklar listesi

  1. Görev modeli
  2. Ekleme
  3. Listeleme
  4. İşaretleme
  5. Komut okuma