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
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 ElementoPratique por conta própria: Compilador de Rust online