Menu
Coddy logo textTech

Capturer l'environnement

Fait partie de la section Logic & Flow du Journey Rust de Coddy — leçon 62 sur 66.

L'une des fonctionnalités les plus puissantes des fermetures (closures) est leur capacité à capturer et à utiliser des variables de leur environnement environnant. Contrairement aux fonctions classiques, les fermetures peuvent « voir » et accéder aux variables qui existent dans la même portée (scope) où elles sont définies.

Voici comment fonctionne la capture d'environnement :

fn main() {
    let x = 10;
    
    let my_closure = || {
        println!("The value of x is: {}", x);
    };
    
    my_closure(); // Cela affichera "The value of x is: 10"
}

Dans cet exemple, la closure capture la variable x depuis la portée environnante et l'utilise à l'intérieur de son corps. La closure n'a pas besoin que x soit passé en tant que paramètre - elle y a automatiquement accès.

Vous pouvez également capturer des variables et les utiliser dans des calculs :

let multiplier = 3;
let multiply_by_three = |num| num * multiplier;
let result = multiply_by_three(5); // le résultat est 15
challenge icon

Défi

Facile

Vous recevrez deux entrées. La première entrée est un nombre représentant un prix de base. La deuxième entrée est un nombre représentant un pourcentage de remise. Créez une fermeture (closure) qui capture le pourcentage de remise de l'environnement et calcule le prix final après application de la remise. Appelez la fermeture avec le prix de base et affichez le prix final.

Exigences :

  • Lire la première entrée (prix de base) et supprimer les espaces blancs
  • La convertir en f64
  • Lire la deuxième entrée (pourcentage de remise) et supprimer les espaces blancs
  • La convertir en f64
  • Créeer une fermeture qui prend un paramètre (le prix de base) et capture le pourcentage de remise de l'environnement environnant
  • La fermeture doit calculer le prix final en utilisant la formule : base_price - (base_price * discount / 100.0)
  • Appeler la fermeture avec le prix de base
  • Afficher le prix final

Entrée :

  • Première ligne : Un prix de base (par exemple, 100.0)
  • Deuxième ligne : Un pourcentage de remise (par exemple, 20.0)

Sortie :

  • Le prix final après application de la remise

Aide-mémoire

Les fermetures (closures) peuvent capturer et utiliser des variables de leur environnement environnant sans en avoir besoin comme paramètres.

Capture d'environnement de base :

let x = 10;

let my_closure = || {
    println!("The value of x is: {}", x);
};

my_closure(); // Affiche "The value of x is: 10"

Capture de variables dans des calculs :

let multiplier = 3;
let multiply_by_three = |num| num * multiplier;
let result = multiply_by_three(5); // le résultat est 15

La fermeture capture automatiquement multiplier de la portée environnante et l'utilise dans le calcul.

Essayez vous-même

use std::io;

fn main() {
    // Lire le prix de base
    let mut base_price_input = String::new();
    io::stdin().read_line(&mut base_price_input).expect("Failed to read line");
    let base_price: f64 = base_price_input.trim().parse().expect("Invalid number");
    
    // Lire le pourcentage de remise
    let mut discount_input = String::new();
    io::stdin().read_line(&mut discount_input).expect("Failed to read line");
    let discount: f64 = discount_input.trim().parse().expect("Invalid number");
    
    // TODO: Créer une closure qui capture la remise et calcule le prix final
    // TODO: Appeler la closure avec le prix de base
    
    // Afficher le prix final
    // println!("{}", final_price);
}
quiz iconTestez-vous

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