is_some() e is_none()
Parte da seção Logic & Flow do Journey de Rust da Coddy — lição 37 de 66.
Às vezes você precisa verificar se um Option contém um valor sem realmente extrair esse valor. Rust fornece dois métodos convenientes para isso: .is_some() e .is_none().
Ambos os métodos retornam um valor booleano, tornando-os perfeitos para uso em condições if:
let maybe_score = Some(85);
if maybe_score.is_some() {
println!("We have a score!");
}
if maybe_score.is_none() {
println!("No score available");
}O método .is_some() retorna true se o Option contém um valor Some, e false se for None. O método .is_none() funciona de maneira oposta - ele retorna true para None e false para Some.
Desafio
FácilVocê receberá um número como entrada. Crie um Option<i32> que contenha Some(number) se o número for positivo, ou None se o número for zero ou negativo. Use .is_some() e .is_none() para verificar o Option e imprimir a mensagem apropriada.
Requisitos:
- Leia a entrada e converta-a para
i32 - Crie uma variável
Option<i32>:- Se o número for positivo (maior que 0), atribua
Some(number) - Se o número for zero ou negativo, atribua
None
- Se o número for positivo (maior que 0), atribua
- Use
.is_some()para verificar se oOptioncontém um valor - Se
.is_some()retornartrue, imprima:Positive number detected - Use
.is_none()para verificar se oOptionestá vazio - Se
.is_none()retornartrue, imprima:No positive number
Entrada:
- Um único número inteiro (ex:
42,0, ou-5)
Saída:
- Se o número for positivo:
Positive number detected - Se o número for zero ou negativo:
No positive number
Folha de consulta
Use .is_some() para verificar se um Option contém um valor:
let maybe_score = Some(85);
if maybe_score.is_some() {
println!("We have a score!");
}Use .is_none() para verificar se um Option está vazio:
if maybe_score.is_none() {
println!("No score available");
}Ambos os métodos retornam valores booleanos (true ou false).
Experimente você mesmo
use std::io;
fn main() {
// Ler a entrada
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let number: i32 = input.trim().parse().expect("Invalid input");
// TODO: Escreva seu código abaixo
// Cria um Option<i32> baseado em se o número é positivo
// Verifica se o Option é Some e imprime a mensagem apropriada
}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
1Fluxo de Controle Avançado
A Expressão 'match'Correspondência de Múltiplos ValoresCorrespondência de IntervalosA Expressão 'if let'Loops como ExpressõesRecapitulação - Parser de Comandos Simples4Agrupando Dados com Structs
O que é uma Struct?Visão Geral de StructsAcessando Campos de uma StructStructs MutáveisStructs como Parâmetros de FunçãoTuple StructsRecapitulação - Criando uma Struct Book2Introdução a Vetores
O que é um Vetor?Criando um VetorAdicionando Elementos com pushAcessando Elementos do VetorIterando sobre um VetorIteração MutávelRemovendo ElementosRecapitulação - Rastreador de Pontuação Básico5Pares Chave-Valor com Hash Maps
O que é um Hash Map?Criando um Hash MapInserindo Pares Chave-ValorAcessando ValoresIterando sobre um Hash MapAtualizando um ValorRemovendo um ParRecapitulação - Contador de Palavras8Projeto: Inventário Simples de Itens
Configuração do ProjetoAdicionando um ItemVerificando o EstoqueVendendo um ItemJuntando tudo3Lista de Tarefas via Linha de Comando
Configuração do ProjetoAdicionando uma TarefaVisualizando Todas as TarefasRemovendo uma TarefaCódigo Final6Lidando com a Ausência com 'Option'
O que é um 'Option'?Usando 'match' com 'Option'is_some() e is_none()Fazendo o unwrap de um 'Option'O método expectFornecendo um valor padrão: unwrap_orRecapitulação - Encontrar um Elemento