Menu
Coddy logo textTech

Usando 'match' com 'Result'

Parte da seção Logic & Flow do Journey de Rust da Coddy — lição 43 de 66.

Agora que você entende o que é um Result, vamos aprender a maneira mais explícita e poderosa de lidar com casos de sucesso e falha: usando uma expressão match.

Assim como com Option, match força você a lidar com ambas as variantes de um Result. Você cria um braço para Ok para lidar com o sucesso, e outro braço para Err para lidar com a falha:

let result = divide(10, 2);

match result {
    Ok(value) => println!("Division successful: {}", value),
    Err(error) => println!("Division failed: {}", error),
}

Quando o Result é Ok, o match extrai o valor de sucesso e executa o primeiro braço. Quando é Err, ele extrai a informação de erro e executa o segundo braço. Este padrão garante que você nunca ignore acidentalmente um erro potencial.

challenge icon

Desafio

Fácil

Você receberá duas entradas. A primeira entrada é um número (como uma string), e a segunda entrada é outro número (como uma string). Crie uma função que tente dividir o primeiro número pelo segundo número e retorne um Result<f64, &'static str>. Se o segundo número for zero, retorne um Err com a mensagem "Division by zero". Caso contrário, retorne Ok com o resultado da divisão. Use uma expressão match para lidar com os casos Ok e Err e imprimir a mensagem apropriada.

Requisitos:

  • Ler a primeira entrada (dividendo) e remover espaços em branco
  • Converter a primeira entrada para f64
  • Ler a segunda entrada (divisor) e remover espaços em branco
  • Converter a segunda entrada para f64
  • Criar uma função que receba dois parâmetros f64 e retorne Result<f64, &'static str>
  • Dentro da função, verifique se o divisor é 0.0:
    • Se sim, retorne Err("Division by zero")
    • Se não, retorne Ok(dividend / divisor)
  • Chamar a função com os dois números convertidos
  • Usar uma expressão match para lidar com o Result
  • No braço Ok(value), imprima: Result: [value]
  • No braço Err(error), imprima: Error: [error]

Entrada:

  • Primeira linha: Um número representando o dividendo (ex: 10.0)
  • Segunda linha: Um número representando o divisor (ex: 2.0)

Saída:

  • Se a divisão for bem-sucedida: Result: [result]
  • Se houver divisão por zero: Error: Division by zero

Folha de consulta

Use match para lidar com ambas as variantes Ok e Err de um Result:

let result = divide(10, 2);

match result {
    Ok(value) => println!("Division successful: {}", value),
    Err(error) => println!("Division failed: {}", error),
}

A expressão match obriga você a lidar com os casos de sucesso e falha. Quando o Result é Ok, ela extrai o valor de sucesso e executa o primeiro braço. Quando é Err, ela extrai a informação de erro e executa o segundo braço.

Experimente você mesmo

use std::io;

// TODO: Crie sua função divide aqui que retorna Result<f64, &'static str>


fn main() {
    // Lê a primeira entrada (dividendo)
    let mut dividend_input = String::new();
    io::stdin().read_line(&mut dividend_input).expect("Failed to read line");
    let dividend: f64 = dividend_input.trim().parse().expect("Invalid number");
    
    // Lê a segunda entrada (divisor)
    let mut divisor_input = String::new();
    io::stdin().read_line(&mut divisor_input).expect("Failed to read line");
    let divisor: f64 = divisor_input.trim().parse().expect("Invalid number");
    
    // TODO: Chame sua função divide e use match para tratar o Result
    // Imprima "Result: [value]" para o caso Ok
    // Imprima "Error: [error]" para o caso Err
}
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