apprendre-rust

Cours gratuits de Rust 🦀 en Francais 🇫🇷

View on GitHub

Sommaiređź“š

Implémentation de traits

Qu’est ce qu’un trait❔

Un trait est une collection de methodes communes a chaque type. Les traits sont similaires aux interfaces certains autres langages.

Exemple

Le trait std::fmt::Display est un trait qui definit comment afficher un type de donné.

print!("{}", 42);

Ici, 42 est une valeure de type i32, et elle ne peut pas directement etre affichée car ce n’est pas un string.

Donc pour etre affiché par la macro print! il faut d’abord le convertir en string.

C’est ce que fait le trait std::fmt::Display

Quand nous executons

print!("{}", 42);

La macro print! va appeler le trait std::fmt::Display pour savoir comment afficher la valeure 42.

Ce systeme est le meme pour tous les types de données.

Implementer un trait

Premierement, nous avons besoins d’un struct sur lequelle implementer le trait :

struct Personne {
    nom: String,
    age: u8,
    passions: Vec<String>,
    pays: String,
    compagnie: String,
}

Ensuite, nous allons implementer le trait to_string pour le struct Personne.

Cette methode retourne une représentation textuelle de l’instance d’un struct.

Pour implementer un trait, on utilise le mot clé impl avec la syntaxe suivante :

impl ToString for Personne {
    fn to_string(&self) -> String {
        format!("Bonjour, je m'appelle {}, J'ai {} ans et je vis en {}. Je travaille chez {}, et mes passions sont : {}", self.nom, self.age, self.pays, self.compagnie, self.passions.join(", "))
    }
}

ℹ️ La macro format! est utilisee comme la macro print! mais retourne un string au lieu d’afficher directement dans la console.

Utiliser un trait

Nous allons maintenant créer une nouvelle instance de notre struct Personne et utiliser la methode to_string.

let personne = Personne {
    nom: String::from("LĂ©opold"),
    age: 13,
    passions: vec![String::from("💻"), String::from("🛌"), String::from("🍔")],
    pays: String::from("France 🇫🇷"),
    compagnie: String::from("Skwal-net"),
};

let presentation = personne.to_string();

println!("{}", presentation);

ℹ️ Les noms des traits et des methodes sont les memes pour tous les types.

Sortie:

Bonjour, je m'appelle Léopold, J'ai 13 ans et je vis en France 🇫🇷. Je travaille chez Skwal-net, et mes passions sont : 💻, 🛌, 🍔

Accueil 🏠 - Section suivante ⏭️


Course created by SkwalExe and inspired by Dcode