CodeBlanks Logo Icon CodeBlanks

Hata ve çıkış

Hata durumunda uygun exit kodu döndürürsün.

Hata ve çıkış

İyi bir CLI, hata mesajını stderr'e yazar ve sıfır olmayan bir çıkış kodu döndürür; böylece betikler başarısızlığı anlayabilir. main bir ExitCode döndürebilir:

use std::process::ExitCode;

fn main() -> ExitCode {
    let args: Vec<String> = std::env::args().collect();
    match calistir(&args) {
        Ok(mesaj) => {
            println!("{mesaj}");
            ExitCode::SUCCESS
        }
        Err(e) => {
            eprintln!("hata: {e}");
            ExitCode::from(1)
        }
    }
}

stdout ve stderr

println! standart çıktıya, eprintln! standart hataya yazar. Kullanıcı çıktıyı dosyaya yönlendirdiğinde (not liste > notlar.txt) hata mesajları dosyaya karışmaz, ekranda kalır. Çıkış kodu kuralı: 0 başarı, 1 genel hata, 2 hatalı kullanım.

fn cikis_kodu(r: &Result<String, String>) -> u8 {
    match r {
        Ok(_) => 0,
        Err(_) => 1,
    }
}

Uygulama Çıkış kodları

fn cikis_kodu(r: &Result<String, String>) -> u8 yaz. main ExitCode döndürsün: Ok("tamam") ve Err("hata") için kodları boşlukla yazdır, sonra ExitCode::SUCCESS döndür.

Başlangıç kodu

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

Örnek çözüm

main.rs
use std::process::ExitCode;

fn cikis_kodu(r: &Result<String, String>) -> u8 {
    match r {
        Ok(_) => 0,
        Err(_) => 1,
    }
}

fn main() -> ExitCode {
    let a: Result<String, String> = Ok(String::from("tamam"));
    let b: Result<String, String> = Err(String::from("hata"));
    println!("{} {}", cikis_kodu(&a), cikis_kodu(&b));
    ExitCode::SUCCESS
}

Beklenen çıktı

0 1

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>std::process::exit(1)</code> yerine <code>main</code>'den <code>ExitCode</code> döndürmek neden tercih edilir?

  • exit derlenmez
  • ExitCode daha küçüktür
  • Fark yok
  • exit hemen sonlanır ve yığındaki değerlerin drop'ları çalışmaz Doğru cevap

Açıklama: Normal dönüş, tamponların boşaltılması ve dosyaların kapanması gibi temizliklerin yapılmasını sağlar.

2 Hata akışı

Soru
Err(e) => {
    ____!("hata: {e}");
    ExitCode::from(1)
}
Cevap
Err(e) => {
    eprintln!("hata: {e}");
    ExitCode::from(1)
}

Açıklama: eprintln! mesajı standart hataya yazar.

3 Kavram ve anlamı

Kavram Anlamı
ExitCode::SUCCESS 0
ExitCode::from(2) Hatalı kullanım
eprintln! stderr
println! stdout

Orta seviye bölümündeki tüm dersler