rust / intermediate
Snippet
Musterabgleich mit Option und Result
Rusts Option- und Result-Typen sind leistungsstarke Fehlerbehandlungskonstrukte. Der ?-Operator gibt Fehler früh zurück, während match-Ausdrücke mit Wächtern verschiedene Fälle elegant behandeln. Dieses Muster ersetzt traditionelle Null-Prüfungen und Ausnahmebehandlung.
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
24
fn find_user(id: u32) -> Option<String> {if id == 1 {Some(String::from("Alice"))} else {None}}fn greet_user(id: u32) -> Result<String, String> {let name = find_user(id).ok_or("User not found".to_string())?;match name.len() {n if n > 10 => Ok(format!("Hello, {}!", name)),n if n > 5 => Ok(format!("Hi, {}", name)),_ => Ok(format!("Hey {}", name)),}}fn main() {match greet_user(1) {Ok(greeting) => println!("{}", greeting),Err(e) => println!("Error: {}", e),}}
Erklärung
1
fn find_user(id: u32) -> Option<String>
Funktion gibt Option<String> zurück, Some enthält Namen, None bedeutet nicht gefunden
2
.ok_or("User not found".to_string())?
Konvertiert Option zu Result, ? gibt früh Err zurück falls None
3
match name.len() { ... }
Musterabgleich mit Wächtern (n if Bedingung) prüft Namenslänge
4
_ => Ok(format!("Hey {}", name))
Platzhalter-Muster behandelt letzten Fall, gibt Ok zurück