Menu
Coddy logo textTech

Closures avec paramètres

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

Bien que les closures qui ne prennent aucun paramètre soient utiles, la plupart du temps, vous voudrez passer des données à vos closures pour les rendre plus flexibles et puissantes. L'ajout de paramètres aux closures suit le même modèle que celui que vous avez appris précédemment, mais avec des valeurs à l'intérieur des barres verticales.

Voici comment définir une closure qui accepte un paramètre :

let add_one = |x: i32| x + 1;

Remarquez que le paramètre x se place entre les barres verticales, tout comme les paramètres de fonction. Vous pouvez ensuite appeler cette fermeture en passant une valeur :

let add_one = |x: i32| x + 1;
let result = add_one(5); // le résultat est 6

Pour les fermetures (closures) avec plusieurs paramètres, séparez-les par des virgules :

let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // le résultat est 12
challenge icon

Défi

Facile

Vous recevrez deux entrées. La première entrée est un nombre, et la seconde entrée est également un nombre. Créez une closure qui prend deux paramètres et calcule la puissance (le premier paramètre élevé à la puissance du second paramètre). Stockez la closure dans une variable, appelez-la avec les valeurs d'entrée et affichez le résultat.

Exigences :

  • Lire la première entrée (nombre de base) et supprimer les espaces blancs
  • La convertir en i32
  • Lire la seconde entrée (exposant) et supprimer les espaces blancs
  • La convertir en u32
  • Créer une closure avec deux paramètres qui calcule la puissance en utilisant la méthode .pow()
  • Stocker la closure dans une variable
  • Appeler la closure avec les deux valeurs d'entrée
  • Afficher le résultat

Entrée :

  • Première ligne : Un nombre de base (par exemple, 2)
  • Deuxième ligne : Un exposant (par exemple, 3)

Sortie :

  • Le résultat du calcul de la puissance

Aide-mémoire

Les fermetures (closures) peuvent accepter des paramètres en les plaçant entre les barres verticales || :

let add_one = |x: i32| x + 1;
let result = add_one(5); // le résultat est 6

Pour plusieurs paramètres, séparez-les par des virgules :

let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // le résultat est 12

Essayez vous-même

use std::io;

fn main() {
    // Lire la première entrée (nombre de base)
    let mut base_input = String::new();
    io::stdin().read_line(&mut base_input).expect("Failed to read line");
    let base: i32 = base_input.trim().parse().expect("Invalid number");
    
    // Lire la deuxième entrée (exposant)
    let mut exp_input = String::new();
    io::stdin().read_line(&mut exp_input).expect("Failed to read line");
    let exponent: u32 = exp_input.trim().parse().expect("Invalid number");
    
    // TODO: Créer une closure qui calcule la puissance et la stocker dans une variable
    // TODO: Appeler la closure avec la base et l'exposant
    
    // Afficher le résultat
    println!("{}", result);
}
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