Aperçu des structures
Fait partie de la section Logic & Flow du Journey Rust de Coddy — leçon 21 sur 66.
Maintenant que vous comprenez ce que sont les structs, apprenons comment les créer et les utiliser concrètement. Cela implique deux étapes : d'abord définir la structure de la struct, puis en créer des instances.
Pour définir une struct, vous utilisez le mot-clé struct suivi du nom de la struct et de ses champs à l'intérieur d'accolades. Chaque champ a un nom et un type :
struct User {
username: String,
active: bool,
}Cela crée un modèle pour une struct User avec deux champs : username de type String et active de type bool.
Les noms de struct en Rust suivent le PascalCase (également appelé CamelCase) — chaque mot commence par une majuscule, sans tirets bas. Par exemple :
User, BlogPost, GamePlayer.Une fois que vous avez défini une structure, vous pouvez en créer des instances en spécifiant des valeurs pour chaque champ :
let user1 = User {
username: String::from("alice"),
active: true,
};Remarquez que vous fournissez le nom de la structure suivi d'accolades contenant chaque nom de champ, deux-points, et sa valeur. L'ordre des champs n'a pas besoin de correspondre à l'ordre de définition.
Pour accéder à la valeur d'un champ à partir d'une instance de structure, utilisez la notation par point — le nom de l'instance suivi d'un point et du nom du champ :
println!("{}", user1.username); // alice
println!("{}", user1.active); // trueVous pouvez également mettre à jour la valeur d'un champ en utilisant la notation par point, à condition que l'instance soit déclarée avec let mut :
let mut user1 = User {
username: String::from("alice"),
active: true,
};
user1.active = false;Défi
FacileVous recevrez trois entrées : un nom de produit, un prix (sous forme de nombre décimal) et une quantité en stock (sous forme d'entier). Définissez une structure Product avec trois champs : name de type String, price de type f64, et stock de type i32. Ensuite, créez une instance de cette structure en utilisant les valeurs d'entrée et affichez les informations du produit.
Exigences :
- Définir une structure
Productavec les champs :name: String,price: f64, etstock: i32 - Lire la première entrée comme étant le nom du produit
- Lire la deuxième entrée et la convertir en
f64pour le prix - Lire la troisième entrée et la convertir en
i32pour la quantité en stock - Créer une instance de la structure
Productavec ces valeurs - Afficher les informations du produit exactement selon le format indiqué ci-dessous
Entrée :
- Première ligne : Nom du produit (par ex.,
Laptop) - Deuxième ligne : Prix sous forme de nombre décimal (par ex.,
999.99) - Troisième ligne : Quantité en stock sous forme d'entier (par ex.,
15)
Sortie :
- Première ligne :
Product: [name] - Deuxième ligne :
Price: $[price] - Troisième ligne :
Stock: [quantity]
Aide-mémoire
Les noms de structures utilisent le PascalCase (par exemple, UserAccount). Pour définir une structure, utilisez le mot-clé struct suivi du nom de la structure et de ses champs à l'intérieur d'accolades :
struct User {
username: String,
active: bool,
}Chaque champ possède un nom et un type.
Pour créer une instance d'une structure, spécifiez les valeurs pour chaque champ :
let user1 = User {
username: String::from("alice"),
active: true,
};L'ordre des champs dans l'instance ne doit pas nécessairement correspondre à l'ordre de définition.
Pour accéder à un champ, utilisez la notation par point — le nom de l'instance suivi d'un point et du nom du champ :
println!("{}", user1.username); // prints: alice
println!("{}", user1.active); // prints: trueEssayez vous-même
use std::io;
// TODO : Définissez votre structure Product ici
fn main() {
// Lire le nom du produit
let mut name = String::new();
io::stdin().read_line(&mut name).expect("Failed to read line");
let name = name.trim().to_string();
// Lire le prix
let mut price_input = String::new();
io::stdin().read_line(&mut price_input).expect("Failed to read line");
let price: f64 = price_input.trim().parse().expect("Failed to parse price");
// Lire la quantité en stock
let mut stock_input = String::new();
io::stdin().read_line(&mut stock_input).expect("Failed to read line");
let stock: i32 = stock_input.trim().parse().expect("Failed to parse stock");
// TODO : Créer une instance de la structure Product en utilisant les valeurs saisies
// TODO : Afficher les informations du produit dans le format requis
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logic & Flow
1Structures de contrôle avancées
L'expression 'match'Filtrage de plusieurs valeursFiltrage d'intervallesL'expression 'if let'Les boucles en tant qu'expressionsRécapitulatif - Analyseur de commandes simple4Regrouper des données avec les structures
Qu'est-ce qu'une structure ?Aperçu des structuresAccéder aux champs d'une structureStructures mutablesLes structures comme paramètres de fonctionStructures tupleRécapitulatif - Créer une structure Book2Introduction aux vecteurs
Qu'est-ce qu'un vecteur ?Créer un vecteurAjouter des éléments avec pushAccéder aux éléments d'un vecteurItérer sur un vecteurItération mutableSupprimer des élémentsRécapitulatif - Suivi de score basique5Paires clé-valeur avec les Hash Maps
Qu'est-ce qu'une Hash Map ?Créer une Hash MapInsérer des paires clé-valeurAccéder aux valeursParcourir une Hash MapMettre à jour une valeurSupprimer une paireRécapitulatif - Compteur de mots8Projet : Inventaire d'articles simple
Configuration du projetAjouter un articleVérifier le stockVendre un articleAssembler le tout3Liste de tâches en ligne de commande
Configuration du projetAjouter une tâcheAfficher toutes les tâchesSupprimer une tâcheCode final