Prendre des décisions et répéter des opérations

RustBeginner
Pratiquer maintenant

Introduction

Les programmes deviennent utiles lorsqu’ils peuvent choisir entre plusieurs possibilités et répéter un calcul pour plusieurs valeurs. Rust utilise des conditions booléennes pour prendre des décisions et des boucles pour répéter des opérations de manière contrôlée.

Dans ce lab, vous allez compléter quatre petites parties d’un récapitulatif d’expédition préparé. À chaque étape, vous ne modifierez qu’une seule expression ciblée : une comparaison, les résultats de deux branches, une expression de total cumulé et une condition d’acceptation.

Créer une comparaison booléenne

Dans cette étape, vous allez comparer le poids d’un colis à une limite et enregistrer le résultat vrai ou faux.

Accédez au projet préparé et ouvrez son fichier source :

cd /home/labex/project/shipping-summary
nano src/main.rs

L’opérateur de comparaison == vérifie si deux valeurs sont égales. Il est différent du signe = utilisé précédemment pour stocker ou affecter une valeur. La comparaison initiale renvoie false, car 12 n’est pas égal à 10. Pour ce rapport, un colis est lourd lorsque son poids est supérieur à la limite.

Sur la ligne de l’étape 1, remplacez uniquement == par l’opérateur « supérieur à » > :

    let is_heavy = package_weight > heavy_limit; // Step 1

La comparaison produit la valeur booléenne true, qui est stockée dans is_heavy. Enregistrez avec Ctrl+O, appuyez sur Entrée, puis quittez avec Ctrl+X. Exécutez le programme :

cargo run --quiet

Sa première ligne doit maintenant être :

Heavy package: true

Choisir une valeur avec une expression if

Dans cette étape, vous allez utiliser une expression if pour choisir l’étiquette d’expédition.

Une expression if vérifie une condition booléenne. Lorsque la condition vaut true, Rust évalue le premier bloc ; sinon, il évalue le bloc else. En Rust, if peut être une expression qui produit une valeur. Les deux branches produisent ici du texte, ce qui permet d’affecter le texte sélectionné à shipping_label. Comme l’ensemble de l’expression if devient une valeur stockée, ses branches doivent produire des types compatibles.

Ouvrez le fichier :

nano src/main.rs

Sur la ligne de l’étape 2, remplacez le premier "unknown" par "Freight" et le second par "Standard" :

    let shipping_label = if is_heavy { "Freight" } else { "Standard" }; // Step 2

Rust n’exige pas de parenthèses autour de la condition. Les accolades séparent clairement les deux résultats possibles.

Enregistrez le fichier, quittez l’éditeur, puis exécutez le rapport :

cargo run --quiet

Comme is_heavy vaut true, la deuxième ligne doit être :

Shipping label: Freight

Additionner des valeurs avec une boucle for

Dans cette étape, vous allez utiliser une boucle for bornée et un intervalle inclusif pour calculer un total cumulé.

L’intervalle 3..=6 représente les entiers de 3 à 6, bornes incluses. Une boucle for prend chaque valeur de cet intervalle dans l’ordre et lui attribue temporairement le nom weight dans le corps de la boucle.

La variable mutable total_weight commence à zéro. À chaque répétition, vous devez ajouter le weight actuel au total existant.

Ouvrez le fichier et recherchez la ligne de l’étape 3 :

nano src/main.rs

Remplacez uniquement weight * 0 par weight :

        total_weight = total_weight + weight; // Step 3

Enregistrez et quittez, puis vérifiez le code :

cargo check

Exécutez le rapport :

cargo run --quiet

La boucle additionne 3 + 4 + 5 + 6. Vous devez donc voir :

Total weight: 18

Prendre une décision dans une boucle

Dans cette étape, vous allez combiner la répétition et une décision pour compter les commandes acceptées.

La deuxième boucle parcourt également les poids de 3 à 6. Une commande est acceptée lorsque son poids est inférieur ou égal à 5. L’opérateur <= signifie inférieur ou égal à.

Ouvrez le fichier et recherchez la ligne de l’étape 4 :

nano src/main.rs

Remplacez la comparaison temporaire weight < 0 par :

        let is_accepted = weight <= 5; // Step 4

Le if qui suit est utilisé comme une instruction : lorsque is_accepted vaut true, son bloc incrémente le compteur. Il n’y a pas de else, car aucune action n’est nécessaire ici pour les commandes refusées.

Enregistrez et quittez, puis exécutez le rapport terminé :

cargo run --quiet

Les poids 3, 4 et 5 sont acceptés, tandis que 6 ne l’est pas. La sortie finale doit être :

Heavy package: true
Shipping label: Freight
Total weight: 18
Accepted orders: 3

Résumé

Vous avez créé des comparaisons booléennes, sélectionné une valeur avec une expression if, répété des opérations avec une boucle for et un intervalle inclusif, maintenu un total cumulé et placé une décision dans une boucle pour compter les valeurs correspondantes.