0Pricing
Learn Rust Coding · Leçon

Gardes et liaisons de correspondance

Ajoutez des conditions et capturez des valeurs.

Gardes et liaisons de correspondance est une leçon Learn Rust Coding gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Learn Rust Coding, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Learn Rust Coding comprend 4 leçons au total.

Qu’est-ce qu’une garde de filtrage ?

Une garde de filtrage est une condition if supplémentaire ajoutée à une branche de match. La branche ne s’exécute que si le motif correspond et que la condition est vraie.

Elle permet de diviser une variante en cas plus précis selon ses données.

match number {
    Some(n) if n > 0 => println!("positive"),
    Some(n) => println!("zero or negative"),
    None => println!("no number"),
}

Syntaxe des gardes

Écrivez le motif, puis if condition, puis =>. La condition peut utiliser toutes les variables associées par le motif.

Si la garde est fausse, Rust passe à la branche suivante.

fn main() {
    let n = 4;
    match n {
        x if x % 2 == 0 => println!("even"),
        _ => println!("odd"),
    }
}

Gardes et données d’énumération

Les gardes sont particulièrement utiles avec les énumérations qui contiennent des données. Vous associez la valeur interne, puis vous la testez.

Ici, un solde positif et un solde négatif reçoivent des messages différents, même s’ils correspondent à la même variante.

enum Account {
    Balance(i32),
    Closed,
}

fn main() {
    let a = Account::Balance(-5);
    match a {
        Account::Balance(b) if b < 0 => println!("overdrawn"),
        Account::Balance(b) => println!("balance {}", b),
        Account::Closed => println!("closed"),
    }
}

L’ordre reste important

Comme les branches sont essayées de haut en bas, placez la branche avec garde la plus spécifique avant la branche générale.

Si la branche simple Balance(b) était placée en premier, elle correspondrait à tout et la branche avec garde ne s’exécuterait jamais.

Filtrer des valeurs littérales

Vous pouvez également faire correspondre directement des littéraux précis dans le motif, sans garde.

Ici, 0 et 1 sont comparés exactement, et _ traite le reste.

fn main() {
    let n = 1;
    match n {
        0 => println!("zero"),
        1 => println!("one"),
        _ => println!("many"),
    }
}

Filtrer des intervalles

Les motifs peuvent correspondre à un intervalle de valeurs avec ..=, inclusif à ses deux extrémités.

C’est une alternative claire à plusieurs gardes de comparaison.

fn main() {
    let score = 85;
    match score {
        0..=59 => println!("fail"),
        60..=100 => println!("pass"),
        _ => println!("out of range"),
    }
}

Associer une valeur avec l’opérateur @

L’opérateur @ vous permet de tester une valeur par rapport à un motif et de l’associer à un nom en même temps.

Ici, id @ 1..=5 vérifie l’intervalle et stocke la valeur réelle dans id afin que vous puissiez l’afficher.

fn main() {
    let n = 3;
    match n {
        id @ 1..=5 => println!("small id {}", id),
        other => println!("other {}", other),
    }
}

Associer la valeur entière

Un nom simple dans un motif, comme other ci-dessus, associe la valeur entière. Il agit comme un motif fourre-tout que vous pouvez tout de même utiliser.

Utilisez _ lorsque vous voulez ignorer la valeur, et un nom lorsque vous en avez besoin.

fn main() {
    let n = 99;
    match n {
        0 => println!("zero"),
        value => println!("got {}", value),
    }
}

Combiner gardes et liaisons

Vous pouvez combiner une liaison avec une garde pour contrôler précisément le comportement : associez les données, puis ajoutez une condition.

Ce programme traite spécialement les soldes pairs élevés.

enum Account {
    Balance(i32),
}

fn main() {
    let a = Account::Balance(200);
    match a {
        Account::Balance(b) if b > 100 && b % 2 == 0 => println!("big even {}", b),
        Account::Balance(b) => println!("normal {}", b),
    }
}

Gardes sur plusieurs motifs

Une garde s’applique à toute la branche, même lorsque celle-ci combine plusieurs motifs avec |.

La condition est vérifiée après qu’au moins l’un des motifs listés correspond.

fn main() {
    let n = 6;
    match n {
        2 | 4 | 6 if n > 3 => println!("big even"),
        _ => println!("other"),
    }
}

Assembler le tout

Ce programme final combine des variantes avec données, une liaison, une garde et un motif fourre-tout pour classer une mesure de température.

Modifiez la valeur et relancez le programme pour voir différentes branches s’exécuter.

enum Reading {
    Temp(i32),
    Missing,
}

fn main() {
    let r = Reading::Temp(38);
    match r {
        Reading::Temp(t) if t >= 38 => println!("fever: {}", t),
        Reading::Temp(t) => println!("normal: {}", t),
        Reading::Missing => println!("no reading"),
    }
}

Vérification rapide

Vérifiez votre compréhension des gardes et des liaisons.

Récapitulatif

Vous avez appris à affiner les correspondances avec des gardes (pattern if condition), à faire correspondre des littéraux et des plages (..=), et à créer des liaisons avec des noms ou l’opérateur @.

Avec tout ce qui précède, vous pouvez maintenant modéliser des ensembles fixes d’états, leur associer des données et réagir précisément à chaque cas. Excellent travail sur les énumérations et match !

Questions Fréquemment Posées

La leçon « Gardes et liaisons de correspondance » est-elle gratuite ?

Oui — le texte complet de « Gardes et liaisons de correspondance » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Learn Rust Coding, passe à CoddyKit PRO. Le cours Learn Rust Coding comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Gardes et liaisons de correspondance » ?

Ajoutez des conditions et capturez des valeurs. Tu pratiques Learn Rust Coding avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Learn Rust Coding ?

Aucune expérience préalable n'est requise. Learn Rust Coding sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Gardes et liaisons de correspondance » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Learn Rust Coding ?

Oui. Chaque leçon Learn Rust Coding inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Définir votre premier énuméré
  2. Faire correspondre les variantes d’un énuméré
  3. Énumérés avec données
  4. Gardes et liaisons de correspondance
← Retour à Learn Rust Coding