is_ok() e is_err()
Parte da seção Logic & Flow do Journey de Rust da Coddy — lição 44 de 66.
Às vezes, você precisa verificar rapidamente se um Result representa sucesso ou falha sem extrair os valores reais. O Rust fornece dois métodos convenientes para isso: .is_ok() e .is_err().
Ambos os métodos retornam um valor booleano, tornando-os perfeitos para verificações condicionais simples. O método .is_ok() retorna true se o Result for Ok, e false se for Err. O método .is_err() funciona de forma inversa:
let success: Result = Ok(42);
let failure: Result = Err("Something went wrong");
if success.is_ok() {
println!("Operation succeeded!");
}
if failure.is_err() {
println!("Operation failed!");
}Estes métodos são particularmente úteis quando você só precisa saber o status do resultado sem se preocupar com os valores específicos internos. Ao contrário do match, eles não consomem o Result, então você ainda pode usá-lo depois.
Desafio
FácilVocê receberá duas entradas. A primeira entrada é um número (como uma string), e a segunda entrada é um indicador de status (success ou failure). Crie um Result<i32, &'static str> baseado no status. Se o status for success, crie um Ok contendo o número analisado. Se o status for failure, crie um Err com a mensagem "Operation failed". Use .is_ok() e .is_err() para verificar o status do resultado e imprimir a mensagem apropriada.
Requisitos:
- Leia a primeira entrada (número) e remova os espaços em branco
- Analise a primeira entrada para
i32 - Leia a segunda entrada (status) e remova os espaços em branco
- Crie uma variável
Result<i32, &'static str>:- Se o status for
success, atribuaOk(parsed_number) - Se o status for
failure, atribuaErr("Operation failed")
- Se o status for
- Use
.is_ok()para verificar se o resultado foi bem-sucedido:- Se for verdadeiro, imprima:
Success detected
- Se for verdadeiro, imprima:
- Use
.is_err()para verificar se o resultado é um erro:- Se for verdadeiro, imprima:
Error detected
- Se for verdadeiro, imprima:
Entrada:
- Primeira linha: Um número (ex:
42) - Segunda linha: Ou
successoufailure
Saída:
- Se o status for
success:Success detected - Se o status for
failure:Error detected
Folha de consulta
Rust fornece dois métodos para verificar o status de um Result sem extrair seus valores:
.is_ok()- retornatruese oResultforOk,falsecaso contrário.is_err()- retornatruese oResultforErr,falsecaso contrário
let success: Result<i32, &str> = Ok(42);
let failure: Result<i32, &str> = Err("Something went wrong");
if success.is_ok() {
println!("Operation succeeded!");
}
if failure.is_err() {
println!("Operation failed!");
}Esses métodos são úteis para verificações condicionais simples quando você só precisa saber o status do resultado. Ao contrário do match, eles não consomem o Result, permitindo que você o use posteriormente.
Experimente você mesmo
use std::io;
fn main() {
// Ler a primeira entrada (número)
let mut number_input = String::new();
io::stdin().read_line(&mut number_input).expect("Failed to read line");
let number_input = number_input.trim();
// Converter o número para i32
let parsed_number: i32 = number_input.parse().expect("Failed to parse number");
// Ler a segunda entrada (status)
let mut status = String::new();
io::stdin().read_line(&mut status).expect("Failed to read line");
let status = status.trim();
// TODO: Criar um Result<i32, &'static str> baseado no status
// Se o status for "success", criar Ok(parsed_number)
// Se o status for "failure", criar Err("Operation failed")
// TODO: Usar .is_ok() e .is_err() para verificar o resultado e imprimir 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 Book7Tratando Erros com 'Result'
O que é um 'Result'?Usando 'match' com 'Result'is_ok() e is_err()Atalhos: unwrap e expectO Operador de Interrogação '?'Parsing de Strings para NúmerosRecapitulação - Função de Divisão Segura2Introduçã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 Final