Structures mutables
Fait partie de la section Logic & Flow du Journey Rust de Coddy — leçon 23 sur 66.
Par défaut, les instances de struct en Rust sont immuables - une fois que vous les avez créées, vous ne pouvez pas modifier les valeurs de leurs champs. Cependant, tout comme pour les autres variables, vous pouvez rendre une instance de struct mutable en ajoutant le mot-clé mut lors de sa déclaration.
Lorsque vous déclarez une instance de structure comme mutable, vous pouvez modifier n'importe lequel de ses champs en utilisant la notation par point :
let mut player = Player {
name: String::from("Alice"),
score: 0,
};
player.score = 100; // Cela fonctionne car player est mutableSans le mot-clé mut, tenter de modifier un champ entraînerait une erreur de compilation. La mutabilité s'applique à l'instance entière de la structure — vous ne pouvez pas rendre certains champs individuels mutables tout en gardant les autres immuables.
Défi
FacileVous recevrez quatre entrées : un nom de joueur, un score initial (sous forme d'entier), un score bonus à ajouter (sous forme d'entier) et un ajustement de score final (sous forme d'entier). Définissez une structure Player avec deux champs : name de type String et score de type i32. Créez une instance mutable de cette structure, puis modifiez le champ score plusieurs fois en utilisant les valeurs d'entrée.
Exigences :
- Définir une structure
Playeravec les champs :name: Stringetscore: i32 - Lire la première entrée comme nom du joueur
- Lire la deuxième entrée et la convertir en
i32pour le score initial - Créer une instance mutable de la structure
Playeravec ces valeurs - Lire la troisième entrée et la convertir en
i32pour le score bonus - Ajouter le score bonus au score actuel du joueur en utilisant la notation par point
- Lire la quatrième entrée et la convertir en
i32pour l'ajustement final - Ajouter l'ajustement final au score actuel du joueur
- Afficher les informations du joueur dans le format exact indiqué ci-dessous
Entrée :
- Première ligne : Nom du joueur (par ex.,
Alice) - Deuxième ligne : Score initial sous forme d'entier (par ex.,
50) - Troisième ligne : Score bonus sous forme d'entier (par ex.,
30) - Quatrième ligne : Ajustement final sous forme d'entier (par ex.,
20)
Sortie :
- Première ligne :
Player: [name] - Deuxième ligne :
Final Score: [score]
Aide-mémoire
Les instances de structures en Rust sont immuables par défaut. Pour modifier les valeurs des champs après la création, déclarez l'instance comme mutable en utilisant le mot-clé mut :
let mut player = Player {
name: String::from("Alice"),
score: 0,
};
player.score = 100; // Modifier le champ en utilisant la notation par pointLa mutabilité s'applique à l'ensemble de l'instance de la structure - vous ne pouvez pas rendre certains champs individuels mutables tout en gardant les autres immuables.
Essayez vous-même
use std::io;
// TODO: Définir la structure Player ici avec les champs name et score
fn main() {
// Lire le nom du joueur
let mut name = String::new();
io::stdin().read_line(&mut name).expect("Failed to read line");
let name = name.trim().to_string();
// Lire le score initial
let mut initial_score = String::new();
io::stdin().read_line(&mut initial_score).expect("Failed to read line");
let initial_score: i32 = initial_score.trim().parse().expect("Invalid number");
// Lire le score bonus
let mut bonus = String::new();
io::stdin().read_line(&mut bonus).expect("Failed to read line");
let bonus: i32 = bonus.trim().parse().expect("Invalid number");
// Lire l'ajustement final
let mut adjustment = String::new();
io::stdin().read_line(&mut adjustment).expect("Failed to read line");
let adjustment: i32 = adjustment.trim().parse().expect("Invalid number");
// TODO: Créer une instance mutable de Player
// TODO: Ajouter le score bonus au score du joueur
// TODO: Ajouter l'ajustement final au score du joueur
// TODO: Afficher la sortie au 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