Menu
Coddy logo textTech

Usando 'match' com 'Option'

Parte da seção Logic & Flow 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á o nome de um estudante como entrada. O nome pode estar presente no sistema ou pode estar ausente. Crie um 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 quaisquer espaços em branco da entrada usando .trim()
  • Crie uma variável Option<String>:
    • Se o nome após o trim não estiver vazio, atribua Some(name.to_string())
    • Se o nome após o trim estiver vazio, atribua None
  • Use uma expressão match para lidar com ambas as variantes do Option
  • No braço Some(name), imprima: Welcome, [name]!
  • No braço None, imprima: No name provided

Entrada:

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

Saída:

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

Folha de consulta

Use uma expressão match para lidar com valores Option criando 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!"),
}

O braço Some(name) usa desestruturação para extrair o valor interno da variante Some. A variável name contém o valor real, não o invólucro Option.

O braço None lida com o caso onde não há valor, permitindo que você forneça um comportamento alternativo.

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 Logic & Flow