Utilisation des vérifications de correspondance en Rust

Beginner

This tutorial is from open-source community. Access the source code

Introduction

Dans ce laboratoire, nous apprenons à utiliser les vérifications de correspondance (match guards) en Rust pour filtrer les branches en fonction de conditions. La vérification de correspondance est ajoutée après le motif et est représentée par le mot clé if suivi d'une condition. La condition de vérification nous permet de raffiner davantage la correspondance des motifs et d'effectuer des vérifications supplémentaires avant d'exécuter la branche correspondante de l'expression match. Cependant, il est important de noter que le compilateur ne considère pas les conditions de vérification lors de la vérification de la couverture des motifs, il est donc nécessaire de s'assurer que tous les motifs sont toujours couverts par l'expression match.

Note : Si le nom de fichier n'est pas spécifié dans le laboratoire, vous pouvez utiliser n'importe quel nom de fichier que vous voulez. Par exemple, vous pouvez utiliser main.rs, le compiler et l'exécuter avec rustc main.rs &&./main.

Vérifications de correspondance

On peut ajouter une vérification de correspondance (match guard) pour filtrer la branche.

#[allow(dead_code)]
enum Temperature {
    Celsius(i32),
    Fahrenheit(i32),
}

fn main() {
    let temperature = Temperature::Celsius(35);
    // ^ TODO essayez différentes valeurs pour `temperature`

    match temperature {
        Temperature::Celsius(t) if t > 30 => println!("{}C est au-dessus de 30 degrés Celsius", t),
        // La partie `if condition` ^ est une vérification de correspondance
        Temperature::Celsius(t) => println!("{}C est en-dessous de 30 degrés Celsius", t),

        Temperature::Fahrenheit(t) if t > 86 => println!("{}F est au-dessus de 86 degrés Fahrenheit", t),
        Temperature::Fahrenheit(t) => println!("{}F est en-dessous de 86 degrés Fahrenheit", t),
    }
}

Notez que le compilateur ne prendra pas en compte les conditions de vérification de correspondance lors de la vérification si tous les motifs sont couverts par l'expression match.

fn main() {
    let number: u8 = 4;

    match number {
        i if i == 0 => println!("Zero"),
        i if i > 0 => println!("Plus grand que zéro"),
        // _ => unreachable!("Ne devrait jamais arriver."),
        // TODO ^ décommentez pour corriger la compilation
    }
}

Sommaire

Félicitations ! Vous avez terminé le laboratoire sur les vérifications de correspondance. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.