Lektionen des Moduls (1/2)
Definieren und Instanziieren von Structs
Die Structs (oder Strukturen) in Rust sind benutzerdefinierte Datentypen, die es Ihnen ermöglichen, mehrere zusammengehörige Werte zu gruppieren. Sie ähneln Objekten oder Klassen in anderen Sprachen, jedoch ohne Vererbung.
Eine Struct definieren
Um eine Struct zu definieren, verwenden wir das Schlüsselwort struct gefolgt vom Namen in PascalCase. Im Inneren definieren wir die Namen und Typen der Felder:
struct User {
username: String,
email: String,
active: bool,
sign_in_count: u64,
}
Eine Instanz erstellen
Um eine Struct zu verwenden, müssen wir eine Instanz erstellen, indem wir alle angegebenen Felder ausfüllen:
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
// Accesso ai campi tramite notazione con punto
println!("L'utente {} è attivo? {}", user1.username, user1.active);
}
Veränderlichkeit (Mutability) von Structs
In Rust muss die gesamte Instanz als veränderlich (mut) markiert werden, wenn Sie eines ihrer Felder ändern möchten. Rust erlaubt es nicht, nur bestimmte Felder als veränderlich zu markieren:
fn main() {
let mut user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
user1.active = false; // Valido perché user1 è mutabile!
}
Tuple Structs und Unit-Like Structs
Rust unterstützt neben den klassischen Structs mit benannten Feldern zwei weitere Struct-Formate:
- Tuple Structs: Sie haben einen zugeordneten Namen, aber die Felder haben keine individuellen Namen, sondern besitzen nur den Typ. Sie sind nützlich, um spezifische Typen zu definieren und zu differenzieren:
Code
struct Point(i32, i32, i32); let origin = Point(0, 0, 0); - Unit-Like Structs: Sie definieren keine Felder. Sie verhalten sich wie der Typ
(). Sie sind nützlich, wenn Verhaltensweisen (Traits) auf einem Typ implementiert werden müssen, ohne Daten darin zu speichern.
Probiere es aus
Definieren Sie die Struct User über der main-Methode mit den Feldern: username (vom Typ String) und active (vom Typ bool).
Hinweis anzeigen
Schreiben Sie `struct User { username: String, active: bool }`vor`main`.
Lösung nach 3 Versuchen verfügbar
Ändern Sie user1, indem Sie sie veränderlich machen (let mut user1), und ändern Sie das Feld active vor der Ausgabe auf false.
Hinweis anzeigen
Fügen Sie `mut`zu`let user1`hinzu, damit daraus`let mut user1`wird, und fügen Sie dann`user1.active = false;` ein.
Lösung nach 3 Versuchen verfügbar
Definieren Sie eine Tuple Struct namens Color, die drei ganzzahlige Felder vom Typ i32 enthält. Instanziieren Sie Color in main mit den Werten 255, 0 und 100, weisen Sie sie der Variablen my_color zu und geben Sie ihr erstes Element (Rotwert) mit println! aus.
Hinweis anzeigen
Definieren Sie die Tuple Struct mit `struct Color(i32, i32, i32);`. Instanziieren Sie sie in main als `let my_color = Color(255, 0, 100);`und geben Sie den Rotwert mit`my_color.0` aus.
Lösung nach 3 Versuchen verfügbar