Menu
Coddy logo textTech

Le paramètre Self

Fait partie de la section Object Oriented Programming du Journey Rust de Coddy — leçon 2 sur 61.

Lorsqu'une méthode doit accéder aux données stockées dans une instance de struct, elle utilise le paramètre &self. Ce paramètre spécial est toujours le premier argument d'une méthode et représente une référence à l'instance sur laquelle la méthode est appelée.

Le symbole & signifie que nous empruntons l'instance plutôt que d'en prendre la propriété. Cela permet à la méthode de lire les champs de la structure sans consommer l'instance :

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

impl Rectangle {
    fn area(&self) -> u32 {
        self.width * self.height
    }
    
    fn is_square(&self) -> bool {
        self.width == self.height
    }
}

À l'intérieur du corps de la méthode, self vous donne accès à tous les champs de la structure en utilisant la notation par point. La méthode area lit à la fois width et height pour calculer et renvoyer le résultat.

Parce que &self emprunte seulement l'instance, vous pouvez appeler plusieurs méthodes sur la même structure sans aucun problème :

fn main() {
    let rect = Rectangle { width: 10, height: 5 };
    
    println!("Area: {}", rect.area());      // 50
    println!("Square? {}", rect.is_square()); // faux
}

Les méthodes utilisant &self sont en lecture seule — elles peuvent examiner les données de la structure mais ne peuvent pas les modifier. Dans la prochaine leçon, vous apprendrez comment créer des méthodes qui peuvent modifier l'instance.

challenge icon

Défi

Facile

Créez une struct Circle avec un seul champ : radius (f64).

Ajoutez un bloc d'implémentation pour Circle avec deux méthodes qui utilisent &self :

  • circumference — retourne la circonférence en tant que f64 (formule : 2.0 * 3.14159 * radius)
  • diameter — retourne le diamètre en tant que f64 (formule : 2.0 * radius)

Vous recevrez une entrée :

  • Le rayon du cercle (f64)

Créez une instance de Circle avec le rayon fourni, puis affichez la circonférence et le diamètre sur des lignes séparées.

Format de sortie attendu :

{circumference}
{diameter}

Aide-mémoire

Les méthodes accèdent aux données de la structure en utilisant le paramètre &self, qui doit être le premier argument. Le symbole & signifie que la méthode emprunte l'instance plutôt que d'en prendre la propriété :

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

impl Rectangle {
    fn area(&self) -> u32 {
        self.width * self.height
    }
    
    fn is_square(&self) -> bool {
        self.width == self.height
    }
}

À l'intérieur de la méthode, utilisez self avec la notation par point pour accéder aux champs de la structure. Les méthodes avec &self sont en lecture seule et peuvent examiner les données mais pas les modifier.

Comme &self ne fait qu'emprunter l'instance, vous pouvez appeler plusieurs méthodes sur la même structure :

let rect = Rectangle { width: 10, height: 5 };
println!("Area: {}", rect.area());      // 50
println!("Square? {}", rect.is_square()); // false

Essayez vous-même

use std::io;

// TODO: Définir la structure Circle ici


// TODO: Ajouter le bloc d'implémentation pour Circle avec les méthodes circumference et diameter


fn main() {
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let radius: f64 = input.trim().parse().expect("Invalid number");
    
    // TODO: Créer une instance de Circle et afficher la circonférence et le diamètre
    
}
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 Object Oriented Programming