Analyse de chaînes en nombres
Fait partie de la section Logic & Flow du Journey Rust de Coddy — leçon 47 sur 66.
L'une des applications concrètes les plus courantes de Result est la conversion de chaînes de caractères en nombres. En Rust, cela se fait à l'aide de la méthode .parse(), qui démontre parfaitement pourquoi Result existe - parce que l'analyse syntaxique peut échouer.
La méthode .parse() tente de convertir une chaîne de caractères en un nombre, mais toutes les chaînes ne représentent pas un nombre valide. Par exemple, "42" peut être analysé en le nombre 42, mais "hello" ne peut être converti en aucun nombre :
let valid_number = "42";
let invalid_number = "hello";
let result1: Result = valid_number.parse();
let result2: Result = invalid_number.parse();Lorsque l'analyse réussit, .parse() renvoie Ok(number) contenant la valeur convertie. Lorsqu'elle échoue, elle renvoie Err(error) avec des informations sur la raison pour laquelle l'analyse a échoué. Cela vous oblige à gérer explicitement les deux possibilités, empêchant votre programme de planter en cas de saisie invalide.
Vous pouvez gérer le résultat de l'analyse en utilisant n'importe laquelle des techniques Result que vous avez apprises - match pour une gestion explicite, unwrap() si vous êtes certain qu'il réussira, ou l'opérateur ? pour propager les erreurs.
Défi
FacileÉcrivez une fonction parse_to_integer qui prend une chaîne de caractères input et renvoie la valeur entière analysée. Si la chaîne ne peut pas être analysée en un entier valide, renvoyez 0 comme valeur par défaut.
Utilisez la méthode .parse() pour convertir la chaîne en un i32, et gérez le Result de manière appropriée pour fournir une valeur de retour sûre.
Paramètres :
input(String) : La chaîne à analyser en un entier
Retourne : L'entier analysé en cas de succès, ou 0 si l'analyse échoue (i32)
Aide-mémoire
La méthode .parse() convertit une chaîne de caractères en un nombre et renvoie un type Result car l'analyse peut échouer :
let valid_number = "42";
let invalid_number = "hello";
let result1: Result<i32, _> = valid_number.parse();
let result2: Result<i32, _> = invalid_number.parse();Lorsque l'analyse réussit, .parse() renvoie Ok(number). Lorsqu'elle échoue, elle renvoie Err(error).
Vous pouvez gérer les résultats de l'analyse en utilisant match, unwrap(), l'opérateur ?, ou unwrap_or() pour fournir une valeur par défaut en cas d'échec.
Essayez vous-même
fn parse_to_integer(input: String) -> i32 {
// Écrivez le code ici
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logic & Flow
1Structures de contrôle avancées
L'expression 'match'Filtrage de plusieurs valeursFiltrage d'intervallesL'expression 'if let'Les boucles en tant qu'expressionsRécapitulatif - Analyseur de commandes simple4Regrouper des données avec les structures
Qu'est-ce qu'une structure ?Aperçu des structuresAccéder aux champs d'une structureStructures mutablesLes structures comme paramètres de fonctionStructures tupleRécapitulatif - Créer une structure Book7Gestion des erreurs avec 'Result'
Qu'est-ce qu'un 'Result' ?Utiliser 'match' avec 'Result'is_ok() et is_err()Raccourcis : unwrap et expectL'opérateur point d'interrogation '?'Analyse de chaînes en nombresRécapitulatif - Fonction de division sécurisée2Introduction aux vecteurs
Qu'est-ce qu'un vecteur ?Créer un vecteurAjouter des éléments avec pushAccéder aux éléments d'un vecteurItérer sur un vecteurItération mutableSupprimer des élémentsRécapitulatif - Suivi de score basique5Paires clé-valeur avec les Hash Maps
Qu'est-ce qu'une Hash Map ?Créer une Hash MapInsérer des paires clé-valeurAccéder aux valeursParcourir une Hash MapMettre à jour une valeurSupprimer une paireRécapitulatif - Compteur de mots8Projet : Inventaire d'articles simple
Configuration du projetAjouter un articleVérifier le stockVendre un articleAssembler le tout3Liste de tâches en ligne de commande
Configuration du projetAjouter une tâcheAfficher toutes les tâchesSupprimer une tâcheCode final