Hata ve çıkış
- Rust kursu
- Orta seviye
- Ders 64/115
- 6 dk
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
fn main() {
// buraya yaz
}Örnek çözüm
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ışı
Err(e) => {
____!("hata: {e}");
ExitCode::from(1)
}
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 |