Que fait l'opérateur question (?) en Rust et comment fonctionne-t-il avec les erreurs ?
Bonjour à tous ! Je suis nouveau en Rust et j'essaie de comprendre la gestion des erreurs. Souvent, dans le code des autres, je vois un étrange opérateur question — `?`. Par exemple, ce code :
```rust
use std::fs::File;
use std::io::Read;
fn read_file(path: &str) -> Result {
let mut file = File::open(path)?;
let mut content = String::new();
file.read_to_string(&mut content)?;
Ok(content)
}
```
Je comprends que `File::open` retourne un `Result`, mais que fait ce `?` à la fin de la ligne ? Sans lui, le compilateur se plaint que je ne gère pas le `Result`. Mais si j'ajoute `?`, le code fonctionne.
J'ai essayé de lire la documentation, mais c'est écrit de manière compliquée. Pouvez-vous expliquer en termes simples : qu'est-ce que ce signe magique ? Est-il lié à `unwrap()` ou `match` ? Pourquoi la fonction retourne un `Result`, mais dans le corps je peux utiliser `?` sans écrire un match pour chaque appel ?
Exemple qui me trouble : si je remplace `?` par `.unwrap()`, le code fonctionne aussi, mais en cas d'erreur le programme plante.