Menu
Coddy logo textTech

La méthode expect

Fait partie de la section Logique & Flux 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ù.

challenge icon

Défi

Facile

Vous 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 un 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 :

  • Lisez la première entrée (nom du produit) et supprimez les espaces superflus
  • Lisez la seconde entrée (état du stock) et supprimez les espaces superflus
  • Créez une variable de type Option<String> :
    • Si l'état du stock est yes, affectez Some(product_name.to_string())
    • Si l'état du stock est no, affectez None
  • Utilisez .expect() avec le message "Product should be in stock" pour extraire le nom du produit
  • Affichez le nom du produit extrait au format suivant : Product available: [product_name]

Entrée :

  • Première ligne : un nom de produit (par exemple, Laptop)
  • Seconde ligne : soit yes, soit no

Sortie :

  • Si l'état du stock est yes : Product available: [product_name]
  • Si l'état du stock est no : le programme provoquera une panique avec le message personnalisé « Product should be in stock » (il s'agit du comportement attendu pour ce défi)

Remarque : Lorsque l'état du stock est no, appeler .expect() sur None provoquera une panique avec votre message personnalisé. Cela montre comment .expect() fournit des informations d'erreur plus utiles que .unwrap().

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]
    
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux

Entraînez-vous par vous-même : Compilateur Rust en ligne