L'expression 'if let'
Fait partie de la section Logic & Flow du Journey Rust de Coddy — leçon 4 sur 66.
Parfois, vous n'avez besoin de vérifier qu'un seul motif spécifique et vous ne vous souciez pas de toutes les autres possibilités. Écrire une expression match complète avec une seule branche significative et un _ générique peut sembler verbeux. Rust propose if let comme une alternative plus concise pour ces situations.
L'expression if let vous permet de combiner le filtrage par motif (pattern matching) avec une logique conditionnelle dans une seule instruction lisible. Voici la syntaxe de base :
if let pattern = value {
// code à exécuter si le motif correspond
}Par exemple, au lieu d'écrire un match avec un seul bras utile :
let number = 5;
match number {
5 => println!("Found five!"),
_ => (), // ne rien faire pour les autres valeurs
}Vous pouvez utiliser if let pour rendre le code plus propre :
let number = 5;
if let 5 = number {
println!("Found five!");
}L'expression if let n'exécute le bloc de code que lorsque le motif correspond. Si cela ne correspond pas, rien ne se passe — il n'est pas nécessaire d'avoir un cas « else » explicite, à moins que vous n'en souhaitiez un.
Défi
FacileVous recevrez un nombre en entrée. Lisez l'entrée, convertissez-la en un entier, et utilisez une expression if let pour vérifier si le nombre est exactement 42. S'il correspond, affichez "The answer!". S'il ne correspond pas, n'affichez rien.
Exigences :
- Utilisez une expression
if letpour vérifier si le nombre est égal à42 - Si le nombre est
42, affichez"The answer!" - Si le nombre est n'importe quoi d'autre, n'affichez rien
Entrée : Un seul entier
Sortie : Affichez "The answer!" si le nombre est 42, sinon n'affichez rien
Aide-mémoire
L'expression if let offre un moyen concis de faire correspondre un seul motif sans écrire une instruction match complète.
Syntaxe de base :
if let pattern = value {
// code à exécuter si le motif correspond
}Exemple comparant match et if let :
// Utilisation de match
let number = 5;
match number {
5 => println!("Found five!"),
_ => (), // ne rien faire pour les autres valeurs
}
// Utilisation de if let (plus concis)
let number = 5;
if let 5 = number {
println!("Found five!");
}L'expression if let ne s'exécute que lorsque le motif correspond. S'il ne correspond pas, rien ne se passe à moins d'ajouter une clause else explicite.
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 number: i32 = input.trim().parse().expect("Please enter a valid number");
// TODO : Écrivez votre code ci-dessous
// Utilisez if let pour vérifier si le nombre est égal à 42
}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 final