Διαδρομές
/
Rust
Rust
/
Ασκήσεις
/
Στατιστικά Υγείας
Στατιστικά Υγείας

Στατιστικά Υγείας

Άσκηση εκμάθησης

Εισαγωγή

Συχνά είναι χρήσιμο να ομαδοποιείς μια συλλογή στοιχείων και να χειρίζεσαι αυτές τις ομάδες ως μονάδες. Στη Rust, μια τέτοια ομάδα την ονομάζουμε struct, και κάθε στοιχείο της είναι ένα από τα πεδία του struct. Το struct ορίζει το γενικό σύνολο των διαθέσιμων πεδίων, αλλά ένα συγκεκριμένο παράδειγμα ενός struct ονομάζεται στιγμιότυπο.

Επιπλέον, τα structs μπορούν να έχουν μεθόδους ορισμένες πάνω τους, οι οποίες έχουν πρόσβαση στα πεδία. Σε αυτή την περίπτωση, το ίδιο το struct αναφέρεται ως self. Όταν μια μέθοδος χρησιμοποιεί &mut self, τα πεδία μπορούν να αλλάξουν, ή να μεταβληθούν. Όταν μια μέθοδος χρησιμοποιεί &self, τα πεδία δεν μπορούν να αλλάξουν: είναι αμετάβλητα. Ο έλεγχος της μεταβλητότητας βοηθά τον borrow checker να διασφαλίσει ότι ολόκληρες κατηγορίες από bugs ταυτοχρονισμού απλώς δεν συμβαίνουν στη Rust.

Σε αυτή την άσκηση, θα υλοποιήσεις δύο είδη μεθόδων σε ένα struct. Τα πρώτα είναι γενικά γνωστά ως getters: εκθέτουν τα πεδία του struct στον έξω κόσμο, χωρίς να αφήνουν κανέναν άλλο να μεταβάλει αυτή την τιμή. Στη Rust, αυτές οι μέθοδοι έχουν ιδιωματικά το ίδιο όνομα με το πεδίο που εκθέτουν, δηλαδή, αν έχουμε μια μέθοδο getter που ανακτά ένα πεδίο του struct με όνομα name, η μέθοδος θα ονομάζεται απλώς name().

Θα υλοποιήσεις επίσης μεθόδους ενός άλλου τύπου, γενικά γνωστές ως setters. Αυτές αλλάζουν την τιμή του πεδίου. Οι setters δεν είναι πολύ συνηθισμένοι στη Rust: αν ένα πεδίο μπορεί να τροποποιηθεί ελεύθερα, είναι πιο συνηθισμένο να το κάνεις απλώς δημόσιο. Ωστόσο, είναι χρήσιμοι αν η ενημέρωση του πεδίου πρέπει να έχει παρενέργειες, ή για έλεγχο πρόσβασης: ένας setter με σήμανση pub(crate) επιτρέπει σε άλλα modules μέσα στο ίδιο crate να ενημερώνουν ένα ιδιωτικό πεδίο, το οποίο δεν μπορεί να επηρεαστεί από τον έξω κόσμο.

Τα structs υπάρχουν σε τρεις μορφές: structs με ονομασμένα πεδία, tuple structs και unit structs. Σε αυτή την άσκηση concept, θα εξερευνήσουμε την πρώτη παραλλαγή: structs με ονομασμένα πεδία.

Τα structs ορίζονται με τη λέξη-κλειδί struct, ακολουθούμενη από το όνομα με κεφαλαίο του τύπου που περιγράφει το struct:

struct Item {}

Στη συνέχεια, επιπλέον τύποι εισάγονται στο σώμα του struct ως πεδία του struct, το καθένα με τον δικό του τύπο:

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

Τέλος, οι μέθοδοι μπορούν να οριστούν πάνω σε structs μέσα σε ένα μπλοκ impl:

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

Με αυτή τη σύντομη εισαγωγή στη σύνταξη των structs να έχει τελειώσει, προχώρα και ρίξε μια ματιά στις οδηγίες για αυτή την άσκηση!

Οδηγίες

Δουλεύεις πάνω στην υλοποίηση ενός συστήματος παρακολούθησης της υγείας. Στο πλαίσιο αυτού, πρέπει να παρακολουθείς τα στατιστικά υγείας των χρηστών.

Θα ξεκινήσεις με κάποιες συναρτήσεις χωρίς υλοποίηση σε ένα μπλοκ impl, καθώς και με τον ακόλουθο ορισμό struct:

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

Ο στόχος σου είναι να υλοποιήσεις τις μεθόδους χωρίς υλοποίηση στο User struct που ορίζεται στο μπλοκ impl.

Για παράδειγμα, η μέθοδος new πρέπει να επιστρέφει ένα στιγμιότυπο του User struct με τις καθορισμένες τιμές name, age και weight.

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

Η μέθοδος weight πρέπει να επιστρέφει το βάρος του User.

bob.weight();
// Returns: 155.2

Η μέθοδος set_age πρέπει να ορίζει την ηλικία του User.

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

Καλή διασκέδαση!

Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Rust Exercism

Έτοιμος να ξεκινήσεις την άσκηση Στατιστικά Υγείας;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Rust με 99 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.