Tracks
/
Rust
Rust
/
Übungen
/
Gesundheitsstatistiken
Gesundheitsstatistiken

Gesundheitsstatistiken

Lernübung

Einführung

Es ist oft nützlich, eine Sammlung von Elementen zusammenzufassen und diese Gruppen als Einheiten zu behandeln. In Rust nennen wir eine solche Gruppe ein Struct und jedes Element eines der Felder des Structs. Ein Struct legt die allgemeine Menge der verfügbaren Felder fest, aber ein konkretes Exemplar eines Structs nennt man Instanz.

Außerdem können für Structs Methoden definiert werden, die Zugriff auf die Felder haben. Das Struct selbst wird in diesem Fall als self bezeichnet. Wenn eine Methode &mut self verwendet, können die Felder geändert oder mutiert werden. Wenn eine Methode &self verwendet, können die Felder nicht geändert werden: sie sind unveränderlich. Die Kontrolle der Veränderbarkeit hilft dem Borrow-Checker dabei, sicherzustellen, dass ganze Klassen von Nebenläufigkeits-Bugs in Rust gar nicht erst auftreten.

In dieser Übung implementierst du zwei Arten von Methoden für ein Struct. Die Methoden der ersten Art heißen allgemein Getter: sie legen die Felder des Structs nach außen offen, ohne dass irgendjemand sonst diesen Wert verändern kann. In Rust tragen diese Methoden idiomatischerweise denselben Namen wie das Feld, das sie offenlegen. Wenn wir also eine Getter-Methode haben, die ein Struct-Feld namens name abruft, dann heißt die Methode einfach name().

Du wirst außerdem Methoden einer anderen Art implementieren, die allgemein als Setter bekannt sind. Diese ändern den Wert des Feldes. Setter sind in Rust nicht sehr verbreitet. Wenn ein Feld frei geändert werden kann, ist es üblicher, es einfach öffentlich zu machen. Sie sind aber nützlich, wenn das Aktualisieren des Feldes Nebenwirkungen haben soll, oder für die Zugriffskontrolle: Ein als pub(crate) markierter Setter erlaubt anderen Modulen innerhalb desselben Crates, ein privates Feld zu aktualisieren, das von außen nicht beeinflusst werden kann.

Structs gibt es in drei Ausführungen: Structs mit benannten Feldern, Tupel-Structs und Unit-Structs. In dieser Konzeptübung schauen wir uns die erste Variante an: Structs mit benannten Feldern.

Structs werden mit dem Schlüsselwort struct definiert, gefolgt vom großgeschriebenen Namen des Typs, den das Struct beschreibt:

struct Item {}

Anschließend werden weitere Typen als Felder des Structs in den Body des Structs eingebracht, jeweils mit ihrem eigenen Typ:

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

Schließlich können Methoden für Structs innerhalb eines impl-Blocks definiert werden:

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

Nach dieser kurzen Einführung in die Syntax von Structs schau dir doch gleich die Anleitung für diese Übung an!

Anleitung

Du arbeitest an der Umsetzung eines Systems zur Gesundheitsüberwachung. Dazu musst du die Gesundheitsstatistiken der Nutzer verfolgen.

Du startest mit einigen vorgegebenen, noch nicht implementierten Funktionen in einem impl-Block sowie der folgenden Struct-Definition:

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

Dein Ziel ist es, die vorgegebenen Methoden auf dem User struct zu implementieren, der im impl-Block definiert ist.

Zum Beispiel sollte die Methode new eine Instanz des User struct mit den angegebenen Werten für Name, Alter und Gewicht zurückgeben.

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

Die Methode weight sollte das Gewicht des User zurückgeben.

bob.weight();
// Returns: 155.2

Die Methode set_age sollte das Alter des User festlegen.

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

Viel Spaß!

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Rust Exercism

Bereit, mit Gesundheitsstatistiken zu starten?

Melde dich bei Exercism an, um Rust mit 99 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.