Menu
Coddy logo textTech

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.

challenge icon

Desafio

Fácil

Você 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, atribua Ok(parsed_number)
    • Se o status for failure, atribua Err("Operation failed")
  • Use .is_ok() para verificar se o resultado foi bem-sucedido:
    • Se for verdadeiro, imprima: Success detected
  • Use .is_err() para verificar se o resultado é um erro:
    • Se for verdadeiro, imprima: Error detected

Entrada:

  • Primeira linha: Um número (ex: 42)
  • Segunda linha: Ou success ou failure

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() - retorna true se o Result for Ok, false caso contrário
  • .is_err() - retorna true se o Result for Err, false caso 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
}
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