Kurzusok
/
Cairo
Cairo
/
Feladatok
/
Egészségügyi statisztikák
Egészségügyi statisztikák

Egészségügyi statisztikák

Tanulófeladat

Bevezetés

Gyakran hasznos, ha elemek egy csoportját összefogjuk, és ezeket a csoportokat egységként kezeljük. Caióban egy ilyen csoportot struct-nak, az egyes elemeket pedig a struct mezőinek nevezzük. A struct az elérhető mezők általános körét definiálja, egy konkrét példányát viszont példánynak nevezzük.

Ráadásul a struct-okhoz metódusokat is definiálhatunk, amelyek hozzáférnek a mezőkhöz. Ilyenkor magára a structra self-ként hivatkozunk. Amikor egy metódus ref self: SomeStruct formát használ, a mezők megváltoztathatók, azaz mutálhatók. Amikor egy metódus self: SomeStruct vagy self: @SomeStruct formát használ, a mezők nem változtathatók meg: változtathatatlanok. A változtathatóság szabályozása segít a borrow-checkernek biztosítani, hogy a konkurenciával kapcsolatos hibák egész kategóriái egyszerűen elő se forduljanak Caióban.

Ebben a feladatban kétféle metódust fogsz megvalósítani egy structon. Az első típust általában getternek nevezik: ezek hozzáférhetővé teszik a struct mezőit a külvilág számára, anélkül hogy bárki más módosíthatná azt az értéket.

Emellett egy másik típusú metódust is megvalósítasz, amelyeket általában setternek neveznek. Ezek megváltoztatják a mező értékét. A setterek nem túl gyakoriak Caióban (ha egy mező szabadon módosítható, gyakoribb, hogy egyszerűen nyilvánossá tesszük), de akkor hasznosak, ha a mező frissítésének mellékhatásai vannak.

A struct-okat a struct kulcsszóval definiáljuk, amelyet a struct által leírt típus nagy kezdőbetűs neve követ:

struct Item {}

Ezután további típusokat viszünk be a struct testébe a struct mezőiként, mindegyiket a saját típusával:

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

A trait olyan metódusok halmazát definiálja, amelyeket egy típus implementálhat (itt most a structokra összpontosítunk, de trait-eket enumokon is implementálhatunk). Ezeket a metódusokat a típus példányain hívhatjuk meg, ha ezt a trait-et implementáltuk. A trait-eket a trait kulcsszóval definiáljuk, és a trait-eken belül adjuk meg azokat a metódusszignatúrákat, amelyeket a típusunknak implementálnia kell.

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

Végül a metódusokat structokon is definiálhatjuk egy impl blokkon belül, amely a megadott trait-et implementálja:

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

Utasítások

Éppen egy egészségfigyelő rendszer megvalósításán dolgozol. Ennek részeként nyomon kell követned a felhasználók egészségügyi statisztikáit.

Kezdetnek néhány csonkolt függvénnyel indulsz egy impl blokkban, valamint a következő struct-definícióval:

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

A célod, hogy implementáld a User struct impl blokkban definiált csonkolt metódusait.

Például a new metódusnak egy User struct egy példányát kell visszaadnia a megadott névvel, életkorral és súllyal.

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

A weight metódusnak vissza kell adnia a User súlyát.

bob.weight();
// Returns: 72

A set_age metódusnak be kell állítania a User életkorát.

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

Jó szórakozást!

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Cairo Exercism

Készen állsz elkezdeni a(z) Egészségügyi statisztikák feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Cairo nyelvet 25 fogalom68 feladat segítségével, valódi emberi mentorálással, mindez ingyen.