Da trilha de Rust Este conceito ainda não saiu como card do dia. ir para o card de hoje

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 e None para ausente.
  • unwrap() e expect() extraem o valor, mas causam panic se for None.
  • map() transforma o valor dentro de Some, mantendo None inalterado.
  • and_then() encadeia operações que retornam Option, evitando Option<Option<T>>.
  • unwrap_or() fornece um valor padrão sem risco de panic.
option_basico.rs
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
}

Exercícios

  1. 1
    Fácil

    Extraindo valor com padrão

    Complete a função valor_ou_padrao que recebe um Option<i32> e retorna o valor dentro do Some ou 0 se for None. Use unwrap_or.

    Resolver
  2. 2
    Médio

    Transformando e encadeando

    Complete a função processar que recebe um Option<i32>, multiplica por 2 usando map e, se o resultado for maior que 10, soma 1 usando and_then. Retorne None se a condição não for satisfeita.

    Resolver
  3. 3
    Desafio

    Cadeia de operações com Option

    Implemente calcular que recebe dois Option<i32> e retorna Option<i32>:

    • Se ambos forem Some, some os valores, dobre o resultado e, se o total for maior que 20, subtraia 5.
    • Se qualquer um for None, retorne None. Use and_then e map para encadear as operações.

    Resolver

Continue estudando