Menu
Coddy logo textTech

Le paramètre Self

Fait partie de la section Programmation Orientée Objet 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 possession. 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
    }
}

Dans le corps de la méthode, self vous donne accès à tous les champs de la structure à l’aide de la notation par points. La méthode area lit à la fois width et height pour calculer et renvoyer le résultat.

Comme &self n’emprunte que l’instance, tu peux 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()); // false
}

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, tu apprendras à créer des méthodes capables de modifier l’instance.

challenge icon

Défi

Facile

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

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

  • circumference : renvoie la circonférence sous forme de f64 (formule : 2.0 * 3.14159 * radius)
  • diameter : renvoie le diamètre sous forme de 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 distinctes.

Format de sortie attendu :

{circumference}
{diameter}

Essayez vous-même

use std::io;

// TODO: Définis la structure Circle ici


// TODO: Ajoute 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ée une instance de Circle et affiche la circumference et le diameter
    
}
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 Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur Rust en ligne