Recapitulação - Função de Divisão Segura
Parte da seção Logic & Flow do Journey de Rust da Coddy — lição 48 de 66.
Desafio
FácilVocê receberá duas entradas. A primeira entrada é um número representando o dividendo, e a segunda entrada é um número representando o divisor. Crie uma função safe_divide que receba dois parâmetros f64 e retorne um Result<f64, &'static str>. A função deve retornar Err("Cannot divide by zero") quando o divisor for zero, e Ok com o resultado da divisão caso contrário. Use uma expressão match para tratar o resultado e imprimir a saída apropriada.
Requisitos:
- Leia a primeira entrada (dividendo) e remova os espaços em branco
- Converta a primeira entrada para
f64 - Leia a segunda entrada (divisor) e remova os espaços em branco
- Converta a segunda entrada para
f64 - Crie uma função
safe_divideque receba dois parâmetrosf64e retorneResult<f64, &'static str> - Dentro da função, verifique se o divisor é
0.0:- Se sim, retorne
Err("Cannot divide by zero") - Se não, retorne
Ok(dividend / divisor)
- Se sim, retorne
- Chame a função com os dois números convertidos
- Use uma expressão
matchpara tratar oResult - No braço
Ok(value), imprima:Division result: [value] - No braço
Err(error), imprima:Error: [error]
Entrada:
- Primeira linha: Um número representando o dividendo (ex:
20.0) - Segunda linha: Um número representando o divisor (ex:
4.0)
Saída:
- Se a divisão for bem-sucedida:
Division result: [result] - Se houver divisão por zero:
Error: Cannot divide by zero
Experimente você mesmo
use std::io;
// TODO: Crie a função safe_divide aqui
// fn safe_divide(dividend: f64, divisor: f64) -> Result<f64, &'static str> {
// Seu código aqui
// }
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 safe_divide e use match para lidar com o Result
// Imprima a saída apropriada com base no resultado
}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