O que são Some e None em Rust? Explicando Option<T> para iniciantes
Olá! Acabei de começar a aprender Rust depois de Python e JavaScript, e me deparei com uma construção confusa. No código de outras pessoas, vejo frequentemente coisas assim:
```rust
fn find_user(id: u32) -> Option {
if id == 42 {
Some(String::from("Alice"))
} else {
None
}
}
```
Eu não entendo o que são `Some` e `None`. Por que não posso simplesmente retornar uma string ou `null`? Em Python, eu escreveria:
```python
def find_user(id):
if id == 42:
return "Alice"
else:
return None
```
E isso funcionaria. Mas em Rust, preciso escrever algo como `Option` e envolver o resultado em `Some`. Além disso, tentei usar o resultado dessa função — e obtive um erro de compilação. Aqui está meu código:
```rust
let user = find_user(42);
println!("User: {}", user); // Erro!
```
O compilador reclama que `Option` não implementa a trait `Display`. Como devo trabalhar com isso corretamente? O que significam `Some` e `None`? Por que Rust não pode fazer como