is_ok() et is_err()
Fait partie de la section Logic & Flow du Journey Rust de Coddy — leçon 44 sur 66.
Parfois, vous avez besoin de vérifier rapidement si un Result représente un succès ou un échec sans extraire les valeurs réelles. Rust fournit deux méthodes pratiques pour cela : .is_ok() et .is_err().
Les deux méthodes renvoient une valeur booléenne, ce qui les rend parfaites pour des vérifications conditionnelles simples. La méthode .is_ok() renvoie true si le Result est Ok, et false s'il s'agit d'un Err. La méthode .is_err() fonctionne à l'inverse :
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!");
}Ces méthodes sont particulièrement utiles lorsque vous avez seulement besoin de connaître le statut du résultat sans vous soucier des valeurs spécifiques à l'intérieur. Contrairement à match, elles ne consomment pas le Result, vous pouvez donc toujours l'utiliser par la suite.
Défi
FacileVous recevrez deux entrées. La première entrée est un nombre (sous forme de chaîne de caractères), et la deuxième entrée est un indicateur de statut (success ou failure). Créez un Result<i32, &'static str> basé sur le statut. Si le statut est success, créez un Ok contenant le nombre analysé. Si le statut est failure, créez un Err avec le message "Operation failed". Utilisez .is_ok() et .is_err() pour vérifier le statut du résultat et afficher le message approprié.
Exigences :
- Lire la première entrée (nombre) et supprimer les espaces blancs
- Analyser la première entrée en
i32 - Lire la deuxième entrée (statut) et supprimer les espaces blancs
- Créer une variable
Result<i32, &'static str>:- Si le statut est
success, assignerOk(parsed_number) - Si le statut est
failure, assignerErr("Operation failed")
- Si le statut est
- Utiliser
.is_ok()pour vérifier si le résultat est un succès :- Si vrai, afficher :
Success detected
- Si vrai, afficher :
- Utiliser
.is_err()pour vérifier si le résultat est une erreur :- Si vrai, afficher :
Error detected
- Si vrai, afficher :
Entrée :
- Première ligne : Un nombre (par exemple,
42) - Deuxième ligne : Soit
successsoitfailure
Sortie :
- Si le statut est
success:Success detected - Si le statut est
failure:Error detected
Aide-mémoire
Rust propose deux méthodes pour vérifier l'état d'un Result sans en extraire les valeurs :
.is_ok()- retournetruesi leResultestOk,falsesinon.is_err()- retournetruesi leResultestErr,falsesinon
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!");
}Ces méthodes sont utiles pour des vérifications conditionnelles simples lorsque vous avez seulement besoin de connaître le statut du résultat. Contrairement à match, elles ne consomment pas le Result, ce qui vous permet de l'utiliser par la suite.
Essayez vous-même
use std::io;
fn main() {
// Lire la première entrée (nombre)
let mut number_input = String::new();
io::stdin().read_line(&mut number_input).expect("Failed to read line");
let number_input = number_input.trim();
// Analyser le nombre en i32
let parsed_number: i32 = number_input.parse().expect("Failed to parse number");
// Lire la deuxième entrée (statut)
let mut status = String::new();
io::stdin().read_line(&mut status).expect("Failed to read line");
let status = status.trim();
// TODO: Créer un Result<i32, &'static str> basé sur le statut
// Si le statut est "success", créer Ok(parsed_number)
// Si le statut est "failure", créer Err("Operation failed")
// TODO: Utiliser .is_ok() et .is_err() pour vérifier le résultat et afficher le message approprié
}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