Menu
Coddy logo textTech

Fonctions associées

Fait partie de la section Programmation Orientée Objet 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 des fonctions associées : elles sont associées au type lui-même plutôt qu’à une instance particulière.

L’usage le plus courant des fonctions associées consiste à créer des 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. Elle en crée et en renvoie 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 avec un point :

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

Ce modèle fournit une manière claire d’initialiser des structures 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 également une fonction associée !

challenge icon

Défi

Facile

Créez une Book struct 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
  • Retourne une nouvelle Book avec le titre donné et pages défini à 0

Ajoutez également une méthode appelée info qui prend &self et retourne une String au format suivant : "{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 de la méthode info.

Format de sortie attendu :

{title} has {pages} pages

Essayez vous-même

use std::io;

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


// TODO: Ajoute un bloc impl pour Book avec :
// - Une fonction associée `new` qui prend un title 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: Utilise Book::new pour créer un book avec le title fourni
    // TODO: Affiche 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 Programmation Orientée Objet

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