Menu
Coddy logo textTech

Qu'est-ce qu'un Trait ?

Fait partie de la section Programmation Orientée Objet du Journey Rust de Coddy. Leçon 29 sur 61.

Les génériques vous permettent d’écrire du code qui fonctionne avec n’importe quel type, mais vous devez parfois garantir qu’un type peut faire quelque chose de précis. C’est là qu’interviennent les traits.

Un trait définit un ensemble de méthodes qu’un type doit implémenter. Considère-le comme un contrat : tout type qui « signe » ce contrat promet de fournir le comportement spécifié. Si tu as utilisé des interfaces dans d’autres langages, les traits servent à un objectif similaire.

Voici comment vous définissez un trait :

trait Describable {
    fn describe(&self) -> String;
}

Le mot-clé trait introduit le trait, suivi de son nom. À l’intérieur des accolades, vous déclarez les signatures de méthode : uniquement le nom, les paramètres et le type de retour, sans corps. Le point-virgule après la signature indique qu’il s’agit d’une exigence, et non d’une implémentation.

Ce trait Describable indique : « Tout type qui m’implémente doit fournir une méthode describe qui prend une référence vers lui-même et renvoie une String. » Le trait ne se soucie pas de la manière dont la méthode fonctionne : cela dépend de chaque type qui l’implémente.

Les traits deviennent puissants lorsque plusieurs types différents implémentent le même trait. Un Book, une Car et une Person pourraient tous être Describable, chacun fournissant sa propre description unique. Le trait garantit qu’ils partagent tous cette capacité commune.

challenge icon

Défi

Facile

Définissons votre premier trait ! Un trait établit un contrat : la promesse que tout type qui l’implémente fournira un comportement spécifique. Vous allez créer un trait Summarizable que différents types pourront implémenter afin de fournir un résumé d’eux-mêmes.

Vous allez organiser votre code sur deux fichiers :

  • summary.rs : définissez un trait public appelé Summarizable avec une seule signature de méthode : summarize(&self) -> String. Souvenez-vous que, dans une définition de trait, vous déclarez uniquement la signature de la méthode avec un point-virgule : aucun corps. Cela indique à Rust que « tout type qui implémente ce trait doit fournir une méthode summarize qui renvoie une String. »
  • main.rs : importez votre module de résumé et affichez un message confirmant que votre trait est défini. Comme nous n’avons pas encore appris à implémenter des traits (c’est la prochaine leçon !), vous vérifierez simplement que votre trait se compile correctement.

Dans votre fichier principal, affichez le message suivant pour confirmer que votre définition de trait est valide :

Summarizable trait defined successfully!

Ce défi se concentre uniquement sur la syntaxe de définition d’un trait : le mot-clé trait, le nom du trait et la déclaration de signatures de méthodes sans implémentations. Dans la prochaine leçon, vous apprendrez à faire implémenter ce trait par des structures !

Essayez vous-même

mod summary;

fn main() {
    // TODO: Affiche le message de confirmation indiquant que le trait est défini
    // Expected output: "Summarizable trait defined successfully!"
    
}
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