¿Qué son Some y None en Rust? Explica Option<T> para principiantes
¡Hola! Acabo de empezar a aprender Rust después de Python y JavaScript, y me encontré con una construcción que no entiendo. En código ajeno veo a menudo cosas como:
```rust
fn find_user(id: u32) -> Option {
if id == 42 {
Some(String::from("Alice"))
} else {
None
}
}
```
No entiendo en absoluto qué son `Some` y `None`. ¿Por qué no puedo simplemente devolver un string o `null`? En Python habría escrito:
```python
def find_user(id):
if id == 42:
return "Alice"
else:
return None
```
Y eso funcionaría. Pero en Rust tengo que escribir algo como `Option` y envolver el resultado en `Some`. Es más, intenté usar el resultado de esta función y obtuve un error de compilación. Aquí está mi código:
```rust
let user = find_user(42);
println!("User: {}", user); // ¡Error!
```
El compilador se queja de que `Option` no implementa el trait `Display`. ¿Cómo trabajo correctamente con esto? ¿Qué significan realmente `Some` y `None`? ¿Por qué Rust no puede hacerlo como...