Parcours
/
Cairo
Cairo
/
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, et de manipuler ces groupes comme des unités. En Cairo, on appelle un tel groupe une structure, et chaque élément 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 : ces méthodes ont accès aux champs. Dans ce cas, la structure elle-même est désignée par self. Quand une méthode utilise ref self: SomeStruct, les champs peuvent être modifiés, ou mutés. Quand une méthode utilise self: SomeStruct ou self: @SomeStruct, les champs ne peuvent pas être modifiés : ils sont immuables. Contrôler la mutabilité aide le vérificateur d'emprunts à garantir que des catégories entières de bugs de concurrence ne se produisent tout simplement pas en Cairo.

Dans cet exercice, tu vas implémenter deux sortes de méthodes sur une structure. Les premières sont généralement appelées des getters : elles exposent les champs de la structure au monde extérieur, sans laisser qui que ce soit d'autre muter cette valeur.

Tu vas aussi implémenter un autre type de méthodes, généralement appelées des setters. Celles-ci changent la valeur du champ. Les setters ne sont pas très courants en Cairo : si un champ peut être modifié librement, il est plus courant de simplement le rendre public. Ils restent néanmoins utiles si la mise à jour du champ doit avoir des effets de bord.

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 {}

On introduit ensuite d'autres types dans le corps de la structure, comme champs de celle-ci, chacun avec son propre type :

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

Un trait définit un ensemble de méthodes qu'un type peut implémenter (on se concentrera ici sur les structures, mais les traits peuvent aussi être implémentés sur des énumérations). Ces méthodes peuvent être appelées sur des instances du type lorsque ce trait est implémenté. Les traits se définissent à l'aide du mot-clé trait, et à l'intérieur d'un trait on définit les signatures des méthodes que l'on veut que notre type implémente.

trait ImplTrait {
    // Define the method signature
    fn new() -> Item;
}

Enfin, on peut définir des méthodes sur les structures à l'intérieur d'un bloc impl, qui implémente le trait défini :

impl ItemImpl of ImplTrait {
    // initializes and returns a new instance of our Item struct
    fn new() -> Item {
        Item {}
    }
}

Instructions

Tu travailles à la mise en place d'un système de suivi de santé. Dans ce cadre, tu dois garder la trace des 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: u32,
}

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 le nom, l'âge et le poids indiqués.

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

La méthode weight doit renvoyer le poids du User.

bob.weight();
// Returns: 72

La méthode set_age doit définir l'âge du User.

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
Cairo Exercism

Prêt à commencer Statistiques de santé ?

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