Leçons du module (1/2)
Définir et instancier des Structs
Les struct (ou structures) en Rust sont des types de données personnalisés qui vous permettent de regrouper plusieurs valeurs associées. Elles sont similaires aux objets ou classes dans d'autres langages, mais sans héritage.
Définir une Struct
Pour définir une struct, on utilise le mot-clé struct suivi du nom en PascalCase. À l'intérieur, nous définissons les noms et les types des champs :
struct User {
username: String,
email: String,
active: bool,
sign_in_count: u64,
}
Créer une Instance
Pour utiliser une struct, nous devons créer une instance en renseignant tous les champs spécifiés :
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
// Accesso ai campi tramite notazione con punto
println!("L'utente {} è attivo? {}", user1.username, user1.active);
}
Mutabilité des Structs
En Rust, l'ensemble de l'instance doit être marquée comme mutable (mut) si vous souhaitez modifier l'un de ses champs. Rust ne permet pas de marquer seulement certains champs comme mutables :
fn main() {
let mut user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
user1.active = false; // Valido perché user1 è mutabile!
}
Tuple Structs et Unit-Like Structs
Rust prend en charge deux autres formats de struct en plus des structs classiques à champs nommés :
- Tuple Structs : Elles ont un nom associé mais les champs n'ont pas de noms individuels, ils possèdent uniquement le type. Elles sont utiles pour définir et différencier des types spécifiques :
Code
struct Point(i32, i32, i32); let origin = Point(0, 0, 0); - Unit-Like Structs : Elles ne définissent aucun champ. Elles se comportent comme le type
(). Elles s'avèrent utiles lorsqu'il faut implémenter des comportements (traits) sur un type sans y stocker de données.
À toi de jouer
Définissez la struct User au-dessus du main avec les champs : username (de type String) et active (de type bool).
Afficher l'indice
Écrivez `struct User { username: String, active: bool }`avant le`main`.
Solution disponible après 3 tentatives
Modifiez user1 en la rendant mutable (let mut user1) et changez le champ active à false avant l'affichage.
Afficher l'indice
Ajoutez `mut`à`let user1`pour qu'elle devienne`let mut user1`, puis insérez `user1.active = false;`.
Solution disponible après 3 tentatives
Définissez une tuple struct nommée Color contenant trois champs entiers i32. Dans le main, instanciez Color avec les valeurs 255, 0 et 100 en l'assignant à la variable my_color, puis affichez son premier élément (valeur rouge) à l'aide de println!.
Afficher l'indice
Définissez la tuple struct avec `struct Color(i32, i32, i32);`. Dans le main, instanciez-la avec `let my_color = Color(255, 0, 100);`et affichez la valeur rouge avec`my_color.0`.
Solution disponible après 3 tentatives