Que sont Some et None en Rust ? Expliquez Option<T> pour les débutants
Bonjour ! Je viens de commencer à apprendre Rust après Python et JavaScript, et je suis tombé sur une construction incompréhensible. Dans le code des autres, je vois souvent des choses comme :
```rust
fn find_user(id: u32) -> Option {
if id == 42 {
Some(String::from("Alice"))
} else {
None
}
}
```
Je ne comprends pas du tout ce que sont `Some` et `None`. Pourquoi ne peut-on pas simplement retourner une string ou `null` ? En Python, j'aurais écrit :
```python
def find_user(id):
if id == 42:
return "Alice"
else:
return None
```
Et cela aurait fonctionné. Mais en Rust, je dois écrire un `Option` et envelopper le résultat dans `Some`. De plus, j'ai essayé d'utiliser le résultat de cette fonction — et j'ai obtenu une erreur de compilation. Voici mon code :
```rust
let user = find_user(42);
println!("User: {}", user); // Erreur !
```
Le compilateur se plaint que `Option` n'implémente pas le trait `Display`. Comment travailler correctement avec cela ? Que signifient `Some` et `None` ? Pourquoi Rust ne peut-il pas faire comme