Menu
Coddy logo textTech

Fonctions associées

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

Toutes les fonctions d'un bloc impl n'ont pas besoin d'opérer sur une instance existante. Les fonctions qui ne prennent pas self comme paramètre sont appelées fonctions associées — elles sont associées au type lui-même plutôt qu'à une instance particulière.

L'utilisation la plus courante des fonctions associées est la création de constructeurs. Par convention, ceux-ci sont souvent nommés new :

struct Player {
    name: String,
    score: u32,
}

impl Player {
    fn new(name: String) -> Player {
        Player {
            name,
            score: 0,
        }
    }
}

Remarquez qu'il n'y a pas de paramètre self — cette fonction n'a pas besoin d'un Player existant pour fonctionner. À la place, elle en crée et en retourne un tout nouveau. Le type de retour est la structure elle-même.

Pour appeler une fonction associée, utilisez la syntaxe :: avec le nom du type au lieu de la notation par point :

fn main() {
    let player1 = Player::new(String::from("Alice"));
    
    println!("{} starts with {} points", player1.name, player1.score);
    // Sortie : Alice commence avec 0 point
}

Ce pattern offre un moyen propre d'initialiser des structs avec des valeurs par défaut ou une logique de validation, en gardant la logique de création regroupée avec la définition du type. Vous avez probablement déjà vu cette syntaxe avec String::from() — c'est aussi une fonction associée !

challenge icon

Défi

Facile

Créez une structure Book avec deux champs : title (String) et pages (u32).

Ajoutez un bloc d'implémentation pour Book avec une fonction associée appelée new qui :

  • Prend un paramètre title: String
  • Renvoie un nouveau Book avec le titre donné et pages défini sur 0

Ajoutez également une méthode appelée info qui prend &self et renvoie une String au format : "{title} has {pages} pages"

Vous recevrez une entrée :

  • Le titre du livre (String)

Utilisez la fonction associée Book::new pour créer un livre avec le titre fourni, puis affichez le résultat de l'appel à la méthode info.

Format de sortie attendu :

{title} has {pages} pages

Aide-mémoire

Les fonctions dans un bloc impl qui ne prennent pas self comme paramètre sont appelées des fonctions associées. Elles sont associées au type lui-même plutôt qu'à une instance particulière.

Les fonctions associées sont couramment utilisées comme constructeurs, généralement nommées new :

struct Player {
    name: String,
    score: u32,
}

impl Player {
    fn new(name: String) -> Player {
        Player {
            name,
            score: 0,
        }
    }
}

Pour appeler une fonction associée, utilisez la syntaxe :: avec le nom du type :

let player1 = Player::new(String::from("Alice"));

String::from() est un exemple de fonction associée que vous avez déjà utilisée.

Essayez vous-même

use std::io;

// TODO: Définir la structure Book avec les champs title (String) et pages (u32)


// TODO: Ajouter un bloc impl pour Book avec :
// - Une fonction associée `new` qui prend un titre et retourne un Book avec pages initialisé à 0
// - Une méthode `info` qui retourne une String au format "{title} has {pages} pages"


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

    // TODO: Utiliser Book::new pour créer un livre avec le titre fourni
    // TODO: Afficher le résultat de l'appel à la méthode info
}
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