Parsing de Strings para Números
Parte da seção Logic & Flow do Journey de Rust da Coddy — lição 47 de 66.
Uma das aplicações mais comuns do mundo real do Result é a conversão de strings em números. Em Rust, isso é feito usando o método .parse(), que demonstra perfeitamente por que o Result existe - porque o parsing pode falhar.
O método .parse() tenta converter uma string em um número, mas nem toda string representa um número válido. Por exemplo, "42" pode ser analisado para o número 42, mas "hello" não pode ser convertido em nenhum número:
let valid_number = "42";
let invalid_number = "hello";
let result1: Result = valid_number.parse();
let result2: Result = invalid_number.parse();Quando o parsing é bem-sucedido, .parse() retorna Ok(number) contendo o valor convertido. Quando falha, ele retorna Err(error) com informações sobre o motivo da falha no parsing. Isso força você a lidar com ambas as possibilidades explicitamente, evitando que seu programa trave com uma entrada inválida.
Você pode lidar com o resultado do parsing usando qualquer uma das técnicas Result que você aprendeu - match para tratamento explícito, unwrap() se você tiver certeza de que terá sucesso, ou o operador ? para propagar erros.
Desafio
FácilEscreva uma função parse_to_integer que recebe uma string input e retorna o valor inteiro convertido. Se a string não puder ser convertida em um inteiro válido, retorne 0 como valor padrão.
Use o método .parse() para converter a string em um i32, e trate o Result adequadamente para fornecer um valor de retorno seguro.
Parâmetros:
input(String): A string a ser convertida em um inteiro
Retorna: O inteiro convertido se for bem-sucedido, ou 0 se a conversão falhar (i32)
Folha de consulta
O método .parse() converte uma string em um número e retorna um tipo Result porque o parsing pode falhar:
let valid_number = "42";
let invalid_number = "hello";
let result1: Result<i32, _> = valid_number.parse();
let result2: Result<i32, _> = invalid_number.parse();Quando o parsing é bem-sucedido, o .parse() retorna Ok(number). Quando ele falha, retorna Err(error).
Você pode lidar com os resultados do parsing usando match, unwrap(), o operador ? ou unwrap_or() para fornecer um valor padrão em caso de falha.
Experimente você mesmo
fn parse_to_integer(input: String) -> i32 {
// Escreva o código aqui
}
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