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 !
Défi
FacileCré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
Bookavec le titre donné etpagesdé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} pagesEssayez 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
}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
1Méthodes et comportement
Introduction aux blocs d'implémentationLe paramètre SelfMéthodes mutablesFonctions associéesBlocs d'implémentation multiplesChaînage de méthodesRécapitulatif - Actions sur le rectangle4Projet : Animal virtuel
Définir l'animalNourrir l'animal7Traits standards
Le trait DebugLe trait DisplayClone et CopyLes traits d'égalitéRécapitulatif - Point affichable10Projet : Système de documents
Le trait DrawComposant texte2Encapsulation et modules
Bases des modulesLe mot-clé publicChamps privésGettersSettersRécapitulatif - Casier sécurisé5Généricité
Structures génériquesMéthodes génériquesPlusieurs types génériquesFonctions génériquesRécapitulatif - Point de coordonnées8Les Traits comme contraintes
Syntaxe des contraintes de traitContraintes multiplesLa clause whereRetourner des types avec des traitsRécapitulatif - Afficheur générique11Design Patterns en Rust
Le pattern NewtypeCompositionLe trait DropFrom et IntoRécapitulatif - Mock de Smart Pointer3Enums avancées
Enums avec donnéesMéthodes sur les EnumsMatching des variantes de donnéesL'Enum Option revisitéeRécapitulatif - Enum Shape6Définition des Traits
Qu'est-ce qu'un Trait ?Implémenter des TraitsImplémentations par défautRedéfinir les comportements par défautTraits avec paramètresRécapitulatif - Lecteur multimédiaEntraînez-vous par vous-même : Compilateur Rust en ligne