capypad
0 Tage Serie
rust / intermediate
Snippet

Result<T, E> für behebbare Fehler

Result<T, E> repräsentiert behebbare Fehler: Ok(T) für Erfolg, Err(E) für Fehlschlag. Der ?-Operator propagiert Fehler früh, verlässt die Funktion sofort bei Err. Dies ist idiomatische Rust-Fehlerbehandlung — explizit, zusammensetzbar und null Kosten. Im Gegensatz zu Exceptions sind Fehler Werte die wie andere Daten manipuliert werden können.

snippet.rs
rust
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use std::num::ParseIntError;
 
fn parse_and_double(s: &str) -> Result<i32, ParseIntError> {
let num: i32 = s.parse()?;
Ok(num * 2)
}
 
fn main() {
// Using ? operator for error propagation
match parse_and_double("42") {
Ok(n) => println!("Doubled: {}", n),
Err(e) => println!("Parse error: {}", e),
}
// Chaining with and_then
let result = parse_and_double("10")
.and_then(|n| parse_and_double(&n.to_string()));
match result {
Ok(n) => println!("Chained result: {}", n),
Err(_) => println!("Chain failed"),
}
}
Erklärung
1
fn parse_and_double(s: &str) -> Result<i32, ParseIntError>
Funktion gibt Result zurück: Erfolgswert oder Fehlertyp
2
s.parse::<i32>()?
?-Operator gibt früh zurück wenn Err, entpackt Ok-Wert wenn Erfolg
3
Ok(num * 2)
Verpackt erfolgreiche Berechnung in Ok-Variante
4
.and_then(|n| ... )
Verkettet Operationen, leitet Ok-Wert weiter oder Err durch
5
Err(_) => println!("Chain failed")
Platzhalter-Muster fängt jede Fehlervariante ab