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
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 propagationmatch parse_and_double("42") {Ok(n) => println!("Doubled: {}", n),Err(e) => println!("Parse error: {}", e),}// Chaining with and_thenlet 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