La méthode expect
Fait partie de la section Logic & Flow du Journey Rust de Coddy — leçon 39 sur 66.
Bien que .unwrap() remplisse sa fonction, il présente un inconvénient majeur : lorsqu'il panique sur un None, le message d'erreur est générique et peu utile. C'est là que .expect() vient à la rescousse.
La méthode .expect() fonctionne exactement comme .unwrap() - elle extrait la valeur d'un Some et panique sur un None. La différence clé est que .expect() vous permet de fournir un message de panique personnalisé :
let maybe_score = Some(95);
let score = maybe_score.expect("Score should always be present");
println!("Your score is: {}", score);Si l'Option contient un Some, .expect() renvoie la valeur interne tout comme .unwrap(). Mais s'il s'agit d'un None, au lieu d'un message de panique générique, vous verrez votre message personnalisé, ce qui permet de comprendre beaucoup plus facilement ce qui s'est mal passé et où.
Défi
FacileVous recevrez deux entrées. La première entrée est un nom de produit, et la seconde indique si le produit est en stock (yes) ou en rupture de stock (no). Créez une Option<String> qui contient Some(product_name) si le produit est en stock, ou None s'il est en rupture de stock. Utilisez .expect() avec un message descriptif pour extraire le nom du produit et l'afficher.
Exigences :
- Lire la première entrée (nom du produit) et supprimer les espaces blancs
- Lire la seconde entrée (état du stock) et supprimer les espaces blancs
- Créer une variable
Option<String>:- Si l'état du stock est
yes, assignezSome(product_name.to_string()) - Si l'état du stock est
no, assignezNone
- Si l'état du stock est
- Utilisez
.expect()avec le message"Product should be in stock"pour extraire le nom du produit - Affichez le nom du produit extrait au format :
Product available: [product_name]
Entrée :
- Première ligne : Un nom de produit (par exemple,
Laptop) - Deuxième ligne : Soit
yes, soitno
Sortie :
- Si l'état du stock est
yes:Product available: [product_name] - Si l'état du stock est
no: Le programme paniquera avec le message personnalisé "Product should be in stock" (c'est le comportement attendu pour ce défi)
Remarque : Lorsque l'état du stock est no, l'appel de .expect() sur None provoquera une panique avec votre message personnalisé. Cela démontre comment .expect() fournit des informations d'erreur plus utiles par rapport à .unwrap().
Aide-mémoire
La méthode .expect() fonctionne comme .unwrap() mais vous permet de fournir un message de panique personnalisé pour un meilleur débogage des erreurs.
Lorsqu'elle est appelée sur une Option :
- Si elle contient
Some, elle renvoie la valeur interne - Si elle contient
None, elle panique avec votre message personnalisé
let maybe_score = Some(95);
let score = maybe_score.expect("Score should always be present");
println!("Your score is: {}", score);Le message d'erreur personnalisé permet d'identifier plus facilement ce qui s'est mal passé et où dans votre code.
Essayez vous-même
use std::io;
fn main() {
// Lire le nom du produit
let mut product_name = String::new();
io::stdin().read_line(&mut product_name).expect("Failed to read line");
let product_name = product_name.trim();
// Lire l'état du stock
let mut stock_status = String::new();
io::stdin().read_line(&mut stock_status).expect("Failed to read line");
let stock_status = stock_status.trim();
// TODO: Écrivez votre code ci-dessous
// Créer une Option<String> basée sur stock_status
// Utiliser .expect() pour extraire le nom du produit
// Afficher le résultat au format : Product available: [product_name]
}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 Book2Introduction 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 final6Gérer l'absence avec 'Option'
Qu'est-ce qu'une 'Option' ?Utiliser 'match' avec 'Option'is_some() et is_none()Déballer une 'Option'La méthode expectFournir une valeur par défaut : unwrap_orRécapitulatif - Trouver un élément