Introduction aux blocs d'implémentation
Fait partie de la section Object Oriented Programming du Journey Rust de Coddy — leçon 1 sur 61.
En Rust, les structs définissent les données qu'un type contient, mais elles ne définissent pas ce que ce type peut faire. Pour donner un comportement à une struct, nous utilisons des blocs d'implémentation avec le mot-clé impl.
Un bloc d'implémentation connecte des fonctions (appelées méthodes) à une structure spécifique. Voici la structure de base :
struct Dog {
name: String,
age: u8,
}
impl Dog {
fn bark(&self) {
println!("{} says woof!", self.name);
}
}
Le bloc impl Dog indique à Rust que tout ce qui se trouve à l'intérieur appartient à la struct Dog. Cette séparation permet de garder la définition de vos données propre tout en vous permettant d'ajouter autant de méthodes que nécessaire dans le bloc d'implémentation.
Pour appeler une méthode, utilisez la notation par point sur une instance :
fn main() {
let my_dog = Dog {
name: String::from("Rex"),
age: 3,
};
my_dog.bark(); // Sortie : Rex dit woof !
}
Ce modèle consistant à séparer les données (la structure struct) du comportement (le bloc impl) est fondamental pour organiser le code Rust. Dans les prochaines leçons, nous explorerons comment les méthodes accèdent aux données de la structure via le paramètre &self que vous voyez dans l'exemple ci-dessus.
Défi
FacileCréez une structure Cat avec deux champs : name (String) et lives (u8).
Ajoutez un bloc d'implémentation pour Cat avec une méthode appelée meow qui prend &self et affiche le nom du chat suivi de " says meow!".
Vous recevrez deux entrées :
- Première ligne : le nom du chat (String)
- Deuxième ligne : le nombre de vies (u8)
Créez une instance de Cat avec les valeurs fournies et appelez la méthode meow sur celle-ci.
Format de sortie attendu :
{name} says meow!Aide-mémoire
Les blocs d'implémentation connectent les méthodes aux structures en utilisant le mot-clé impl :
struct Dog {
name: String,
age: u8,
}
impl Dog {
fn bark(&self) {
println!("{} says woof!", self.name);
}
}
Le bloc impl sépare la définition des données (structure) du comportement (méthodes). Les méthodes sont appelées en utilisant la notation par point :
let my_dog = Dog {
name: String::from("Rex"),
age: 3,
};
my_dog.bark(); // Résultat : Rex says woof!
Les méthodes utilisent le paramètre &self pour accéder aux données de la structure.
Essayez vous-même
use std::io;
// TODO: Définir la structure Cat avec les champs 'name' (String) et 'lives' (u8)
// TODO: Ajouter un bloc d'implémentation pour Cat avec une méthode 'meow'
fn main() {
let mut name = String::new();
io::stdin().read_line(&mut name).expect("Failed to read line");
let name = name.trim().to_string();
let mut lives_input = String::new();
io::stdin().read_line(&mut lives_input).expect("Failed to read line");
let lives: u8 = lives_input.trim().parse().expect("Failed to parse lives");
// TODO: Créer une instance de Cat et appeler la méthode meow
}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
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édia