Fournir une valeur par défaut : unwrap_or
Fait partie de la section Logic & Flow du Journey Rust de Coddy — leçon 40 sur 66.
Alors que .unwrap() et .expect() peuvent extraire des valeurs d'un Option, ils présentent tous deux un défaut majeur : ils provoquent une panique lorsqu'ils rencontrent un None. Pour un code plus sûr, Rust propose .unwrap_or() - une méthode qui ne panique jamais.
La méthode .unwrap_or() prend une valeur par défaut comme argument. Si l'Option contient un Some, elle retourne la valeur interne. S'il s'agit d'un None, elle retourne la valeur par défaut que vous avez fournie :
let maybe_score = Some(85);
let score = maybe_score.unwrap_or(0);
println!("Score: {}", score); // Affiche : Score : 85
let no_score: Option = None;
let default_score = no_score.unwrap_or(0);
println!("Score: {}", default_score); // Affiche : Score : 0Cette approche est bien plus sûre que .unwrap() car votre programme ne plantera jamais - vous obtenez toujours une valeur utilisable en retour.
Défi
FacileVous recevrez deux entrées. La première entrée est un score (sous forme de nombre), et la deuxième entrée indique si le score est disponible (yes) ou manquant (no). Créez une Option<i32> basée sur le statut de disponibilité. Utilisez .unwrap_or() pour extraire le score en toute sécurité avec une valeur par défaut de 50, puis affichez le score final.
Exigences :
- Lire la première entrée (score) et supprimer les espaces blancs
- Parser la première entrée en
i32 - Lire la deuxième entrée (statut de disponibilité) et supprimer les espaces blancs
- Créer une variable
Option<i32>:- Si le statut de disponibilité est
yes, assignerSome(score) - Si le statut de disponibilité est
no, assignerNone
- Si le statut de disponibilité est
- Utiliser
.unwrap_or(50)pour extraire le score avec une valeur par défaut de50 - Afficher le score final au format :
Final score: [score]
Entrée :
- Première ligne : Un nombre représentant le score (par exemple,
85) - Deuxième ligne : Soit
yes, soitno
Sortie :
- Si le statut de disponibilité est
yes:Final score: [score](le score réel) - Si le statut de disponibilité est
no:Final score: 50(la valeur par défaut)
Aide-mémoire
La méthode .unwrap_or() fournit un moyen sûr d'extraire des valeurs d'une Option sans provoquer de panique. Elle prend une valeur par défaut comme argument et renvoie soit la valeur interne si elle est Some, soit la valeur par défaut si elle est None :
let maybe_score = Some(85);
let score = maybe_score.unwrap_or(0);
// score est 85
let no_score: Option<i32> = None;
let default_score = no_score.unwrap_or(0);
// default_score est 0Cette méthode est plus sûre que .unwrap() ou .expect() car elle ne provoque jamais de panique - vous recevez toujours une valeur utilisable.
Essayez vous-même
use std::io;
fn main() {
// Lire le score
let mut score_input = String::new();
io::stdin().read_line(&mut score_input).expect("Failed to read line");
let score: i32 = score_input.trim().parse().expect("Invalid number");
// Lire le statut de disponibilité
let mut availability = String::new();
io::stdin().read_line(&mut availability).expect("Failed to read line");
let availability = availability.trim();
// TODO: Écrivez votre code ci-dessous
// Créer une Option<i32> basée sur le statut de disponibilité
// Utiliser .unwrap_or(50) pour obtenir le score final
// Afficher le résultat
println!("Final score: {}", final_score);
}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