capypad
0 Tage Serie
rust / intermediate
Snippet

Verkettung von Results mit dem ? Operator

Der ? Operator ist ein leistungsstarkes Werkzeug zur Fehlerweiterleitung, das Ok Werte entpackt oder Err Werte früh aus Funktionen zurückgibt. Er ist besonders nützlich beim Verketten mehrerer Operationen, die fehlschlagen könnten, und eliminiert ausführliche match Statements und if let Ketten.

snippet.rs
rust
1
2
3
4
5
6
7
8
9
10
11
12
use std::num::ParseIntError;
 
fn parse_and_add(a: &str, b: &str) -> Result<i32, ParseIntError> {
let a: i32 = a.parse()?;
let b: i32 = b.parse()?;
Ok(a + b)
}
 
fn main() {
let result = parse_and_add("42", "18");
println!("{:?}", result);
}
Erklärung
1
use std::num::ParseIntError;
Importiert den ParseIntError Typ für explizite Fehlerbehandlung
2
fn parse_and_add(a: &str, b: &str) -> Result<i32, ParseIntError>
Die Funktionssignatur deklariert den Fehlertyp explizit
3
let a: i32 = a.parse()?;
? entpackt den Ok Wert oder gibt Err sofort zurück
4
let b: i32 = b.parse()?;
Das zweite parse kann auch fehlschlagen, ? handhabt es gleich
5
Ok(a + b)
Gibt die Summe bei Erfolg in Ok verpackt zurück