Menu
Coddy logo textTech

Getters

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

Avec des champs privés, le code externe ne peut pas accéder directement aux données de votre struct. Mais parfois, vous devez laisser les autres lire les données sans leur donner la possibilité de les modifier. C'est là que les méthodes getter interviennent.

Un getter est simplement une méthode publique qui retourne une référence à un champ privé :

// wallet.rs
pub struct Wallet {
    balance: f64,
}

impl Wallet {
    pub fn new(initial: f64) -> Wallet {
        Wallet { balance: initial }
    }
    
    pub fn balance(&self) -> f64 {
        self.balance
    }
}

La méthode balance() prend &self (accès en lecture seule) et renvoie la valeur du champ privé. En Rust, les getters sont généralement nommés d'après le champ lui-même — aucun préfixe get_ n'est nécessaire.

Désormais, le code externe peut lire le solde via la méthode :

// main.rs
mod wallet;
use wallet::Wallet;

fn main() {
    let w = Wallet::new(100.0);
    println!("Balance: {}", w.balance());  // Fonctionne !
}

Pour les champs contenant des données possédées comme String, vous retournerez souvent une référence pour éviter une copie inutile :

pub fn name(&self) -> &String {
    &self.name
}

Les getters vous offrent un accès en lecture contrôlé tout en gardant le champ lui-même protégé. La struct reste responsable de ses données — le code externe peut consulter, mais ne peut pas modifier.

challenge icon

Défi

Facile

Construisons un système de profil utilisateur qui démontre comment les méthodes getter fournissent un accès en lecture contrôlé aux données privées.

Vous allez créer deux fichiers pour organiser votre code :

  • profile.rs : Définissez une structure UserProfile avec deux champs privés : username (String) et age (u32). La structure elle-même doit être publique, mais les champs doivent rester privés. Implémentez un constructeur public new qui prend un nom d'utilisateur et un âge. Ajoutez ensuite deux méthodes getter :
    • username — retourne une référence au nom d'utilisateur (&String)
    • age — retourne la valeur de l'âge (u32)
  • main.rs : Importez votre module de profil, créez un UserProfile, et utilisez les méthodes getter pour afficher les informations de l'utilisateur.

Rappelez-vous qu'en Rust, les getters sont généralement nommés d'après le champ lui-même — aucun préfixe get_ n'est nécessaire. Pour les champs String, retournez une référence pour éviter une copie inutile.

Votre sortie doit suivre exactement ce format :

Username: {username}
Age: {age}

Par exemple, si vous créez un profil avec le nom d'utilisateur "alice" et l'âge 25, la sortie sera :

Username: alice
Age: 25

Vous recevrez deux entrées : le nom d'utilisateur et l'âge.

Aide-mémoire

Une méthode getter est une méthode publique qui fournit un accès en lecture seule à un champ privé.

Les getters permettent au code externe de consulter les données sans pouvoir les modifier directement :

pub struct Wallet {
    balance: f64,
}

impl Wallet {
    pub fn new(initial: f64) -> Wallet {
        Wallet { balance: initial }
    }
    
    pub fn balance(&self) -> f64 {
        self.balance
    }
}

En Rust, les getters portent le nom du champ lui-même — aucun préfixe get_ n'est nécessaire.

Pour les champs contenant des données possédées comme String, retournez une référence pour éviter une copie inutile :

pub fn name(&self) -> &String {
    &self.name
}

Utilisation d'une méthode getter :

let w = Wallet::new(100.0);
println!("Balance: {}", w.balance());

Essayez vous-même

mod profile;

use profile::UserProfile;

fn main() {
    let mut input1 = String::new();
    std::io::stdin().read_line(&mut input1).expect("Failed to read line");
    let username = input1.trim().to_string();

    let mut input2 = String::new();
    std::io::stdin().read_line(&mut input2).expect("Failed to read line");
    let age: u32 = input2.trim().parse().expect("Failed to parse age");

    // TODO: Créer un UserProfile en utilisant le constructeur

    // TODO: Utiliser les méthodes getter pour afficher le nom d'utilisateur et l'âge
    // Format :
    // Username: {username}
    // Age: {age}
}
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