Result ve ? İşleci
Hataları aktarın
Result ve ? İşleci, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn Rust Coding öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn Rust Coding kursu toplamda 4 dersten oluşur.
Result Türü
Result<T, E>, Ok(T) ile başarılı olabilen veya Err(E) ile başarısız olabilen bir işlemi temsil eder. Rust'ta hata işleme için kullanılan temel türdür.
fn main() {
let parsed: Result<i32, _> = "42".parse::<i32>();
println!("{:?}", parsed);
}Result Üzerinde Eşleştirme
Her iki sonucu da match ile açıkça işleyebilirsiniz.
fn main() {
match "oops".parse::<i32>() {
Ok(n) => println!("got {n}"),
Err(e) => println!("error: {e}"),
}
}Result Döndürme
Başarısız olabilen işlevler bir Result döndürür; böylece hataların nasıl işleneceğine çağıran karar verir.
fn halve(n: i32) -> Result<i32, String> {
if n % 2 == 0 {
Ok(n / 2)
} else {
Err("odd number".to_string())
}
}
fn main() {
println!("{:?}", halve(10));
println!("{:?}", halve(7));
}? İşleci
? işleci bir Ok değerini açar veya işlevden erken olarak Err döndürür. Uzun eşleştirme ve döndürme kodunun yerini alır.
fn double_str(s: &str) -> Result<i32, std::num::ParseIntError> {
let n = s.parse::<i32>()?;
Ok(n * 2)
}
fn main() {
println!("{:?}", double_str("21"));
println!("{:?}", double_str("x"));
}? ile Zincirleme
Birden çok başarısız olabilecek adım, ? ile zincirlendiğinde okunaklı olur; ilk hata kalan adımları kısa devreye sokar.
fn sum_two(a: &str, b: &str) -> Result<i32, std::num::ParseIntError> {
let x = a.parse::<i32>()?;
let y = b.parse::<i32>()?;
Ok(x + y)
}
fn main() {
println!("{:?}", sum_two("3", "4"));
}main içinde ?
main bir Result döndürebilir; bu nedenle ? orada da çalışır. Döndürülen bir Err, programı sıfır olmayan bir çıkış koduyla sonlandırır.
fn main() -> Result<(), std::num::ParseIntError> {
let n: i32 = "100".parse()?;
println!("parsed {n}");
Ok(())
}Kullanışlı Result Yöntemleri
Kullanışlı birleştiriciler:
unwrap_or(default)— değer veya yedek değermap— Ok değerini dönüştürmemap_err— hatayı dönüştürmeis_ok/is_err— varyantı denetleme
fn main() {
let n = "x".parse::<i32>().unwrap_or(-1);
println!("{n}");
}Option'dan Result'a
? işlecinin anlamlı bir hatayı iletebilmesi için ok_or ile bir Option değerini Result'a dönüştürün.
fn first_char(s: &str) -> Result<char, String> {
let c = s.chars().next().ok_or("empty string".to_string())?;
Ok(c)
}
fn main() {
println!("{:?}", first_char("hi"));
println!("{:?}", first_char(""));
}? Hataları Nasıl Dönüştürür
Hata türleri farklı olduğunda ?, hatayı işlevin bildirilmiş hata türüne dönüştürmek için From::from çağrısı yapar. Bu, katmanlar arasında kullanışlı hata işlemeyi sağlar.
Üretim Ortamında unwrap Kullanmayın
unwrap ve expect, Err durumunda paniğe neden olur. Örnekler ve testler için uygundurlar; ancak gerçek kodda hataların kurtarılabilir kalması için ? işlecini veya açık hata işlemeyi tercih edin.
and_then ile Zincirleme
and_then, sonraki başarısız olabilecek adımı yalnızca önceki adım başarılı olduysa çalıştırır ve değeri adımlar boyunca iletir.
fn main() {
let result = "8"
.parse::<i32>()
.and_then(|n| Ok(n * 2));
println!("{:?}", result);
}Kısa Kontrol
Err olan bir Result'a uygulandığında ? işleci ne yapar?
Özet
Result tabanlı hata işlemeyi öğrendiniz:
Result<T, E>başarıyı veya başarısızlığı modeller?, Ok değerini açar veya erken olarak Err döndürür?, Result döndüren işlevlerde vemainiçinde çalışırmap,map_err,unwrap_orveok_orgibi birleştiriciler yardımcı olur- Üretim ortamında
unwrapkullanmaktan kaçının
Sıkça Sorulan Sorular
“Result ve ? İşleci” dersi ücretsiz mi?
Evet — “Result ve ? İşleci” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn Rust Coding kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn Rust Coding kursu toplamda 4 dersten oluşur.
“Result ve ? İşleci” dersinde ne öğreneceğim?
Hataları aktarın Learn Rust Coding ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Learn Rust Coding öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Learn Rust Coding, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Result ve ? İşleci” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Learn Rust Coding dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Learn Rust Coding dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Result ve ? İşleci
- thiserror
- anyhow
- Hata Dönüştürme