Menu
Coddy logo textTech

Usando 'match' com 'Option'

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

Agora que você entende o que o Option é, vamos aprender a maneira mais comum e explícita de lidar com ele: usando uma expressão match. Essa abordagem força você a considerar ambos os casos possíveis - quando há um valor e quando não há.

A expressão match funciona perfeitamente com Option porque você pode criar braços para ambas as variantes:

let maybe_name = Some("Alice".to_string());

match maybe_name {
    Some(name) => println!("Hello, {}!", name),
    None => println!("Hello, stranger!"),
}

Observe como o braço Some(name) extrai o valor de dentro da variante Some. A variável name agora contém a String real, não o Option. Isso é chamado de desestruturação - você está extraindo o valor interno de dentro do invólucro.

O braço None trata o caso onde não há valor, permitindo que você forneça um comportamento alternativo, como mostrar uma mensagem padrão ou tomar uma ação completamente diferente.

challenge icon

Desafio

Fácil

Você receberá um nome de estudante como entrada. O nome pode estar presente no sistema ou pode estar ausente. Crie uma Option<String> que contenha Some(name) se o nome não estiver vazio, ou None se o nome estiver vazio. Use uma expressão match para lidar com ambos os casos e imprimir a mensagem apropriada.

Requisitos:

  • Leia a entrada como uma string (nome do estudante)
  • Remova qualquer espaço em branco da entrada usando .trim()
  • Crie uma variável Option<String>:
    • Se o nome sem espaços não estiver vazio, atribua Some(name.to_string())
    • Se o nome sem espaços estiver vazio, atribua None
  • Use uma expressão match para lidar com ambas as variantes de Option
  • No braço Some(name), imprima: Welcome, [name]!
  • No braço None, imprima: No name provided

Entrada:

  • Uma única linha contendo um nome de estudante ou uma linha vazia

Saída:

  • Se um nome for fornecido: Welcome, [name]!
  • Se nenhum nome for fornecido (entrada vazia): No name provided

Experimente você mesmo

use std::io;

fn main() {
    // Ler entrada
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let name = input.trim();
    
    // TODO: Criar um Option<String> baseado em se o nome está vazio ou não
    
    // TODO: Usar uma expressão match para lidar com os casos Some e None e imprimir a mensagem apropriada
}
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