Menu
Coddy logo textTech

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 : 0

Cette approche est bien plus sûre que .unwrap() car votre programme ne plantera jamais - vous obtenez toujours une valeur utilisable en retour.

challenge icon

Défi

Facile

Vous 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, assigner Some(score)
    • Si le statut de disponibilité est no, assigner None
  • Utiliser .unwrap_or(50) pour extraire le score avec une valeur par défaut de 50
  • 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, soit no

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 0

Cette 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);
}
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 Logic & Flow