capypad
0 Tage Serie
rust / beginner
Snippet

Option<T>: Sichere Behandlung fehlender Werte

Option<T> ist Rusts Typ für die Repräsentation eines Werts, der existieren könnte oder nicht. Es hat zwei Varianten: Some(T) wenn ein Wert vorhanden ist, und None wenn nicht. Dies zwingt dich, beide Fälle zu behandeln und eliminiert Null-Zeiger-Fehler zur Kompilierzeit.

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
24
25
26
27
28
29
30
fn find_element(arr: &[i32], target: i32) -> Option<usize> {
for (index, &value) in arr.iter().enumerate() {
if value == target {
return Some(index);
}
}
None
}
 
fn main() {
let numbers = [10, 20, 30, 40, 50];
// Using match to handle Option
let result = find_element(&numbers, 30);
match result {
Some(index) => println!("Found at index: {}", index),
None => println!("Element not found"),
}
// Using if let for concise handling
if let Some(index) = find_element(&numbers, 25) {
println!("Found at index: {}", index);
} else {
println!("Element not found with if let");
}
// Using unwrap_or for default values
let index = find_element(&numbers, 100).unwrap_or(999);
println!("Index or default: {}", index);
}
Erklärung
1
fn find_element(arr: &[i32], target: i32) -> Option<usize>
Funktion gibt Option<usize> zurück, entweder Some(index) oder None
2
return Some(index);
Gibt Some-Variante mit dem Index zurück, wenn Element gefunden wurde
3
None
Gibt None-Variante zurück, wenn Schleife ohne Fund beendet wird
4
if let Some(index) = find_element(&numbers, 25)
Pattern Matching, das Wert aus Some extrahiert, oder else-Block für None ausführt
5
unwrap_or(999)
Gibt den enthaltenen Wert oder einen Standardwert zurück, wenn None