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)eNone.
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
- A função
valor_ou_padraorecebe um parâmetroopdo tipoOption<i32>. - Chamamos
op.unwrap_or(0): seopforSome(n), retornan; se forNone, retorna0. - O valor retornado é um
i32, que é impresso nomain. - No
main, chamamos a função comSome(42)eNonepara 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, poisunwrap_orexige um argumento. - Usar
unwrap()em vez deunwrap_or:op.unwrap()causaria panic no casoNone.
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