Avatar ·

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