Rust Erros Básico
Option
Em Rust, Option<T> é um enum que representa a presença (Some(T)) ou ausência (None) de um valor. Ele substitui o uso de null de outras linguagens, forçando você a lidar com a ausência de forma explícita e segura em tempo de compilação.
Você pode extrair o valor com unwrap() ou expect(), mas esses métodos causam panic se o valor for None. Para evitar isso, use unwrap_or() para fornecer um valor padrão, ou transforme o valor com map() e encadeie operações que também podem falhar com and_then().
Option é a base para escrever código robusto em Rust: o compilador exige que você trate ambos os casos, eliminando erros de null pointer em tempo de execução.
Pontos-chave
Option<T>tem duas variantes:Some(T)para valor presente eNonepara ausente.unwrap()eexpect()extraem o valor, mas causam panic se forNone.map()transforma o valor dentro deSome, mantendoNoneinalterado.and_then()encadeia operações que retornamOption, evitandoOption<Option<T>>.unwrap_or()fornece um valor padrão sem risco de panic.
fn main() {
// Option pode ser Some ou None
let some_number: Option<i32> = Some(10);
let no_number: Option<i32> = None;
// unwrap: extrai o valor, mas causa panic se for None
println!("Valor: {}", some_number.unwrap());
// expect: como unwrap, mas com mensagem personalizada
println!("Valor: {}", no_number.expect("Número ausente!")); // panic!
// map: transforma o valor dentro de Some
let dobro = some_number.map(|x| x * 2);
println!("Dobro: {:?}", dobro); // Some(20)
// and_then: encadeia operações que retornam Option
let resultado = some_number.and_then(|x| if x > 5 { Some(x + 1) } else { None });
println!("Resultado: {:?}", resultado); // Some(11)
// unwrap_or: valor padrão se for None
let valor = no_number.unwrap_or(0);
println!("Valor padrão: {}", valor); // 0
}