Passer au contenu principal
eLearner.app
Module 4 · Leçon 2 sur 28/14 dans le cours~12 min
Leçons du module (2/2)

Méthodes et blocs impl

En Rust, les méthodes sont similaires aux fonctions, mais elles sont définies dans le contexte d'une struct (ou d'un enum ou trait) et leur premier paramètre est toujours self, qui représente l'instance de la struct sur laquelle la méthode est appelée.

Définir les Méthodes avec impl

Pour définir des méthodes sur une struct, on utilise un bloc impl (implementation) avec le nom de la struct :

Code
struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    // Questo è un metodo d'istanza. Prende &self in lettura.
    fn area(&self) -> u32 {
        self.width * self.height
    }
}

fn main() {
    let rect = Rectangle { width: 30, height: 50 };

    // Chiamata al metodo tramite notazione con punto
    println!("L'area è: {}", rect.area());
}

Fonctions Associées (Statiques)

Les fonctions définies dans un bloc impl qui n'acceptent pas self comme premier paramètre sont appelées fonctions associées (équivalentes aux méthodes statiques dans d'autres langages).

Elles sont souvent utilisées comme constructeurs pour renvoyer de nouvelles instances de la struct. Pour les appeler, on utilise la syntaxe à double deux-points :: :

Code
impl Rectangle {
    // Funzione associata
    fn square(size: u32) -> Rectangle {
        Rectangle {
            width: size,
            height: size,
        }
    }
}

fn main() {
    // Chiamata alla funzione associata
     let sq = Rectangle::square(10);
 }

Méthodes qui Modifient l'État : &mut self

Si une méthode doit modifier les champs de la struct, elle doit déclarer son premier paramètre comme &mut self. L'instance elle-même sur laquelle la méthode est appelée doit être déclarée comme mutable (let mut) :

Code
impl Rectangle {
    fn double_size(&mut self) {
        self.width *= 2;
        self.height *= 2;
    }
}

À toi de jouer

Exercice#rust.m4.l2.e1
Tentatives : 0Chargement…

Complétez le bloc impl en définissant la méthode area qui prend &self et renvoie u32 (la multiplication de width et height).

Chargement de l'éditeur…
Afficher l'indice

Écrivez `fn area(&self) -> u32 { self.width \* self.height }`à l'intérieur du bloc`impl Rectangle`.

Solution disponible après 3 tentatives

Exercice#rust.m4.l2.e2
Tentatives : 0Chargement…

Définissez la fonction associée square au sein d'impl Rectangle, qui reçoit size: u32 et renvoie une instance Rectangle ayant une largeur et une hauteur égales à size.

Chargement de l'éditeur…
Afficher l'indice

Écrivez `fn square(size: u32) -> Rectangle { Rectangle { width: size, height: size } }`à l'intérieur du bloc`impl`.

Solution disponible après 3 tentatives

Exercice#rust.m4.l2.e3
Tentatives : 0Chargement…

Ajoutez la méthode modificatrice scale à Rectangle au sein du bloc impl. La méthode scale doit prendre une référence mutable à self (&mut self) et un paramètre factor: u32, et multiplier à la fois width et height de Rectangle par factor.

Chargement de l'éditeur…
Afficher l'indice

Implémentez `fn scale(&mut self, factor: u32)`pour mettre à jour`self.width`et`self.height`en les multipliant par`factor`.

Solution disponible après 3 tentatives