Fácil Rust

Extraindo valor com padrão

Enunciado

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.

Requisitos

  • A função deve retornar i32.
  • Deve usar unwrap_or(0).
  • O programa deve imprimir o resultado para Some(42) e None.

Código inicial

fn valor_ou_padrao(op: Option<i32>) -> i32 {
    // complete aqui
}

fn main() {
    println!("{}", valor_ou_padrao(Some(42)));
    println!("{}", valor_ou_padrao(None));
}

Saída esperada

42
0
Ver dica

unwrap_or recebe um valor de fallback e retorna o conteúdo do Some ou o fallback.

Mostrar solução
fn valor_ou_padrao(op: Option<i32>) -> i32 {
    // unwrap_or retorna o valor interno ou 0 se for None
    op.unwrap_or(0)
}

fn main() {
    println!("{}", valor_ou_padrao(Some(42))); // 42
    println!("{}", valor_ou_padrao(None));    // 0
}

Passo a passo

  1. A função valor_ou_padrao recebe um parâmetro op do tipo Option<i32>.
  2. Chamamos op.unwrap_or(0): se op for Some(n), retorna n; se for None, retorna 0.
  3. O valor retornado é um i32, que é impresso no main.
  4. No main, chamamos a função com Some(42) e None para testar os dois casos.

Por que funciona

unwrap_or é um método de Option que consome o Option e devolve o valor interno ou um valor padrão. Ele nunca causa panic, pois trata explicitamente o caso None.

Erros comuns

  • Esquecer de passar o valor padrão: op.unwrap_or() não compila, pois unwrap_or exige um argumento.
  • Usar unwrap() em vez de unwrap_or: op.unwrap() causaria panic no caso None.

Outra forma de resolver

Usar match:

match op {
    Some(n) => n,
    None => 0,
}

Prefira unwrap_or quando o valor padrão for simples.

Saída esperada

42
0