Menu
Coddy logo textTech

O método expect

Parte da seção Lógica & Fluxo do Journey de Rust da Coddy. Lição 39 de 66.

Embora o .unwrap() resolva o problema, ele tem uma grande desvantagem: quando ocorre um panic em um None, a mensagem de erro é genérica e pouco útil. É aqui que o .expect() vem ao resgate.

O método .expect() funciona exatamente como o .unwrap() - ele extrai o valor de um Some e causa um panic em um None. A principal diferença é que o .expect() permite que você forneça uma mensagem de panic personalizada:

let maybe_score = Some(95);
let score = maybe_score.expect("Score should always be present");
println!("Your score is: {}", score);

Se o Option contiver um Some, o .expect() retorna o valor interno exatamente como o .unwrap(). Mas se for um None, em vez de uma mensagem de pânico genérica, você verá sua mensagem personalizada, tornando muito mais fácil entender o que deu errado e onde.

challenge icon

Desafio

Fácil

Você receberá duas entradas. A primeira entrada é um nome de produto, e a segunda entrada indica se o produto está em estoque (yes) ou fora de estoque (no). Crie um Option<String> que contenha Some(product_name) se o produto estiver em estoque, ou None se estiver fora de estoque. Use .expect() com uma mensagem descritiva para extrair o nome do produto e imprimi-lo.

Requisitos:

  • Leia a primeira entrada (nome do produto) e remova os espaços em branco
  • Leia a segunda entrada (status do estoque) e remova os espaços em branco
  • Crie uma variável Option<String>:
    • Se o status do estoque for yes, atribua Some(product_name.to_string())
    • Se o status do estoque for no, atribua None
  • Use .expect() com a mensagem "Product should be in stock" para extrair o nome do produto
  • Imprima o nome do produto extraído no formato: Product available: [product_name]

Entrada:

  • Primeira linha: Um nome de produto (por exemplo, Laptop)
  • Segunda linha: yes ou no

Saída:

  • Se o status do estoque for yes: Product available: [product_name]
  • Se o status do estoque for no: O programa entrará em pânico com a mensagem personalizada "Product should be in stock" (esse é o comportamento esperado para este desafio)

Observação: Quando o status do estoque for no, chamar .expect() em None causará um pânico com sua mensagem personalizada. Isso demonstra como .expect() fornece informações de erro mais úteis em comparação com .unwrap().

Experimente você mesmo

use std::io;

fn main() {
    // Ler o nome do produto
    let mut product_name = String::new();
    io::stdin().read_line(&mut product_name).expect("Failed to read line");
    let product_name = product_name.trim();
    
    // Ler o status do estoque
    let mut stock_status = String::new();
    io::stdin().read_line(&mut stock_status).expect("Failed to read line");
    let stock_status = stock_status.trim();
    
    // TODO: Escreva seu código abaixo
    // Criar um Option<String> baseado no stock_status
    // Usar .expect() para extrair o nome do produto
    // Imprimir o resultado no formato: Product available: [product_name]
    
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo

Pratique por conta própria: Compilador de Rust online