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.
Défi
FacileVous 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
- Si le nom nettoyé n'est pas vide, assigner
- Utiliser une expression
matchpour 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é
}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