Menu
Coddy logo textTech

Utiliser 'match' avec 'Option'

Fait partie de la section Logic & Flow du Journey Rust de Coddy — leçon 36 sur 66.

Maintenant que vous comprenez ce qu'est Option, apprenons la manière la plus courante et la plus explicite de le gérer : en utilisant une expression match. Cette approche vous oblige à considérer les deux cas possibles : lorsqu'il y a une valeur et lorsqu'il n'y en a pas.

L'expression match fonctionne parfaitement avec Option car vous pouvez créer des branches pour les deux variantes :

let maybe_name = Some("Alice".to_string());

match maybe_name {
    Some(name) => println!("Hello, {}!", name),
    None => println!("Hello, stranger!"),
}

Remarquez comment la branche Some(name) extrait la valeur de l'intérieur de la variante Some. La variable name contient maintenant la String réelle, et non l'Option. C'est ce qu'on appelle la déstructuration - vous extrayez la valeur interne de l'enveloppe.

La branche None gère le cas où il n'y a pas de valeur, vous permettant de fournir un comportement alternatif comme l'affichage d'un message par défaut ou l'exécution d'une action totalement différente.

challenge icon

Défi

Facile

Vous recevrez un nom d'étudiant en entrée. Le nom peut être présent dans le système ou il peut être manquant. Créez une Option<String> qui contient Some(name) si le nom n'est pas vide, ou None si le nom est vide. Utilisez une expression match pour gérer les deux cas et afficher le message approprié.

Exigences :

  • Lire l'entrée sous forme de chaîne de caractères (nom de l'étudiant)
  • Supprimer les espaces blancs de l'entrée en utilisant .trim()
  • Créer une variable Option<String> :
    • Si le nom nettoyé n'est pas vide, assigner Some(name.to_string())
    • Si le nom nettoyé est vide, assigner None
  • Utiliser une expression match pour gérer les deux variantes de l'Option
  • Dans la branche Some(name), afficher : Welcome, [name]!
  • Dans la branche None, afficher : No name provided

Entrée :

  • Une seule ligne contenant soit un nom d'étudiant, soit une ligne vide

Sortie :

  • Si un nom est fourni : Welcome, [name]!
  • Si aucun nom n'est fourni (entrée vide) : No name provided

Aide-mémoire

Utilisez une expression match pour gérer les valeurs Option en créant des branches pour les deux variantes :

let maybe_name = Some("Alice".to_string());

match maybe_name {
    Some(name) => println!("Hello, {}!", name),
    None => println!("Hello, stranger!"),
}

La branche Some(name) utilise la déstructuration pour extraire la valeur interne de la variante Some. La variable name contient la valeur réelle, et non l'enveloppe Option.

La branche None gère le cas où il n'y a pas de valeur, vous permettant de définir un comportement alternatif.

Essayez vous-même

use std::io;

fn main() {
    // Lire l'entrée
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let name = input.trim();
    
    // TODO: Créer une Option<String> selon que le nom est vide ou non
    
    // TODO: Utiliser une expression match pour gérer les cas Some et None et afficher le message approprié
}
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