Parcours
/
Rust
Rust
/
Exercices
/
Statistiques de santé
Statistiques de santé

Statistiques de santé

Exercice d'apprentissage

Introduction

Il est souvent utile de regrouper une collection d'éléments, puis de manipuler ces groupes comme des unités. En Rust, on appelle un tel groupe une structure, et chaque élément l'un des champs de cette structure. Une structure définit l'ensemble général des champs disponibles, mais un exemple particulier de structure s'appelle une instance.

De plus, on peut définir des méthodes sur les structures, et ces méthodes ont accès aux champs. La structure elle-même est alors désignée par self. Quand une méthode utilise &mut self, les champs peuvent être modifiés, ou mutés. Quand une méthode utilise &self, les champs ne peuvent pas être modifiés : ils sont immuables. Maîtriser la mutabilité aide le vérificateur d'emprunts à garantir que des catégories entières de bugs de concurrence ne se produisent tout simplement jamais en Rust.

Dans cet exercice d'apprentissage, tu vas implémenter deux sortes de méthodes sur une structure. Les premières sont généralement appelées des accesseurs : elles exposent les champs de la structure au monde extérieur, sans laisser qui que ce soit d'autre modifier cette valeur. En Rust, ces méthodes portent idiomatiquement le nom du champ qu'elles exposent, c'est-à-dire que si l'on a un accesseur qui récupère un champ de la structure nommé name, la méthode s'appellera simplement name().

Tu vas aussi implémenter des méthodes d'un autre genre, généralement appelées des mutateurs. Celles-ci modifient la valeur du champ. Les mutateurs ne sont pas très courants en Rust (si un champ peut être librement modifié, il est plus courant de le rendre simplement public), mais ils sont utiles si la mise à jour du champ doit avoir des effets de bord, ou pour le contrôle d'accès : un mutateur marqué pub(crate) permet à d'autres modules du même crate de mettre à jour un champ privé, sur lequel l'extérieur ne peut pas agir.

Les structures se déclinent en trois variétés : les structures à champs nommés, les structures tuples et les structures unitaires. Dans cet exercice d'apprentissage, on va explorer la première variante : les structures à champs nommés.

Les structures se définissent à l'aide du mot-clé struct, suivi du nom du type qu'elles décrivent, avec une majuscule initiale :

struct Item {}

D'autres types sont ensuite intégrés au corps de la structure en tant que champs de celle-ci, chacun avec son propre type :

struct Item {
    name: String,
    weight: f32,
    worth: u32,
}

Enfin, on peut définir des méthodes sur une structure à l'intérieur d'un bloc impl :

impl Item {
    // initializes and returns a new instance of our Item struct
    fn new() -> Self {
        todo!()
    }
}

Maintenant que cette brève introduction à la syntaxe des structures est faite, n'hésite pas à consulter les instructions de cet exercice !

Instructions

Tu travailles à la mise en œuvre d'un système de suivi de santé. Dans ce cadre, tu dois suivre les statistiques de santé des utilisateurs.

Tu commenceras avec quelques fonctions vides dans un bloc impl, ainsi qu'avec la définition de structure suivante :

pub struct User {
    name: String,
    age: u32,
    weight: f32,
}

Ton objectif est d'implémenter les méthodes vides de la struct User définie dans le bloc impl.

Par exemple, la méthode new doit renvoyer une instance de la struct User avec les valeurs de nom, d'âge et de poids indiquées.

let mut bob = User::new(String::from("Bob"), 32, 155.2);
// Returns: a User with name "Bob", age 32, and weight 155.2

La méthode weight doit renvoyer le poids de l'utilisateur.

bob.weight();
// Returns: 155.2

La méthode set_age doit définir l'âge de l'utilisateur.

bob.set_age(33);
// Updates Bob's age to 33; happy birthday Bob!

Amuse-toi bien !

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Rust Exercism

Prêt à commencer Statistiques de santé ?

Inscris-toi sur Exercism pour apprendre et maîtriser Rust avec 99 exercices, et un vrai mentorat humain, le tout gratuitement.