Übersicht über Structs
Teil des Abschnitts Logic & Flow der Rust-Journey von Coddy — Lektion 21 von 66.
Nachdem Sie nun verstehen, was Structs sind, lernen wir nun, wie man sie tatsächlich erstellt und verwendet. Dies umfasst zwei Schritte: zuerst das Definieren der Struktur des Structs, dann das Erstellen von Instanzen davon.
Um ein Struct zu definieren, verwenden Sie das Schlüsselwort struct, gefolgt vom Namen des Structs und seinen Feldern in geschweiften Klammern. Jedes Feld hat einen Namen und einen Typ:
struct User {
username: String,
active: bool,
}Dies erstellt einen Bauplan für ein User Struct mit zwei Feldern: username vom Typ String und active vom Typ bool.
Struct-Namen in Rust folgen PascalCase (auch CamelCase genannt) — jedes Wort beginnt mit einem Großbuchstaben, ohne Unterstriche. Zum Beispiel:
User, BlogPost, GamePlayer.Sobald Sie ein Struct definiert haben, können Sie Instanzen davon erstellen, indem Sie Werte für jedes Feld angeben:
let user1 = User {
username: String::from("alice"),
active: true,
};Beachten Sie, dass Sie den Namen des Structs angeben, gefolgt von geschweiften Klammern, die jeden Feldnamen, einen Doppelpunkt und seinen Wert enthalten. Die Reihenfolge der Felder muss nicht mit der Reihenfolge der Definition übereinstimmen.
Um auf den Wert eines Feldes einer Struct-Instanz zuzugreifen, verwende die Punktnotation – den Instanznamen gefolgt von einem Punkt und dem Feldnamen:
println!("{}", user1.username); // alice
println!("{}", user1.active); // trueDu kannst den Wert eines Feldes auch mithilfe der Punktnotation aktualisieren, sofern die Instanz mit let mut deklariert wurde:
let mut user1 = User {
username: String::from("alice"),
active: true,
};
user1.active = false;Aufgabe
EinfachSie erhalten drei Eingaben: einen Produktnamen, einen Preis (als Dezimalzahl) und eine Bestandsmenge (als Ganzzahl). Definieren Sie eine Product-Struktur mit drei Feldern: name vom Typ String, price vom Typ f64 und stock vom Typ i32. Erstellen Sie dann eine Instanz dieser Struktur unter Verwendung der Eingabewerte und geben Sie die Produktinformationen aus.
Anforderungen:
- Definieren Sie eine
Product-Struktur mit den Feldern:name: String,price: f64undstock: i32 - Lesen Sie die erste Eingabe als Produktnamen ein
- Lesen Sie die zweite Eingabe ein und konvertieren Sie diese in
f64für den Preis - Lesen Sie die dritte Eingabe ein und konvertieren Sie diese in
i32für die Bestandsmenge - Erstellen Sie eine Instanz der
Product-Struktur mit diesen Werten - Geben Sie die Produktinformationen in dem unten gezeigten exakten Format aus
Eingabe:
- Erste Zeile: Produktname (z. B.
Laptop) - Zweite Zeile: Preis als Dezimalzahl (z. B.
999.99) - Dritte Zeile: Bestandsmenge als Ganzzahl (z. B.
15)
Ausgabe:
- Erste Zeile:
Product: [name] - Zweite Zeile:
Price: $[price] - Dritte Zeile:
Stock: [quantity]
Spickzettel
Struct-Namen verwenden PascalCase (z. B. UserAccount). Um ein Struct zu definieren, verwende das Schlüsselwort struct, gefolgt vom Namen des Structs und seinen Feldern in geschweiften Klammern:
struct User {
username: String,
active: bool,
}Jedes Feld hat einen Namen und einen Typ.
Um eine Instanz eines Structs zu erstellen, gib Werte für jedes Feld an:
let user1 = User {
username: String::from("alice"),
active: true,
};Die Reihenfolge der Felder in der Instanz muss nicht mit der Reihenfolge der Definition übereinstimmen.
Um auf ein Feld zuzugreifen, verwende die Punktnotation — den Instanznamen gefolgt von einem Punkt und dem Feldnamen:
println!("{}", user1.username); // gibt aus: alice
println!("{}", user1.active); // gibt aus: trueProbier es selbst
use std::io;
// TODO: Definiere hier deine Product-Struktur
fn main() {
// Produktnamen lesen
let mut name = String::new();
io::stdin().read_line(&mut name).expect("Failed to read line");
let name = name.trim().to_string();
// Preis lesen
let mut price_input = String::new();
io::stdin().read_line(&mut price_input).expect("Failed to read line");
let price: f64 = price_input.trim().parse().expect("Failed to parse price");
// Lagerbestand lesen
let mut stock_input = String::new();
io::stdin().read_line(&mut stock_input).expect("Failed to read line");
let stock: i32 = stock_input.trim().parse().expect("Failed to parse stock");
// TODO: Erstelle eine Instanz der Product-Struktur unter Verwendung der Eingabewerte
// TODO: Gib die Produktinformationen im erforderlichen Format aus
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logic & Flow
1Fortgeschrittener Kontrollfluss
Der 'match'-AusdruckAbgleichen mehrerer WerteBereiche abgleichenDer 'if let'-AusdruckSchleifen als AusdrückeRückblick – Einfacher Befehls-Parser4Daten gruppieren mit Structs
Was ist ein Struct?Übersicht über StructsZugriff auf Struct-FelderVeränderbare StructsStructs als FunktionsparameterTupel-StructsZusammenfassung – Ein Buch-Struct erstellen2Einführung in Vektoren
Was ist ein Vektor?Einen Vektor erstellenElemente mit push hinzufügenZugriff auf Vektor-ElementeÜber einen Vektor iterierenVeränderliche IterationElemente entfernenZusammenfassung – Einfacher Score-Tracker5Schlüssel-Wert-Paare mit Hash Maps
Was ist eine Hash Map?Erstellen einer Hash MapEinfügen von Schlüssel-Wert-PaarenZugreifen auf WerteIterieren über eine Hash MapAktualisieren eines WertesEntfernen eines PaaresZusammenfassung – Wortzähler8Projekt: Einfaches Artikelinventar
Projekt-SetupEinen Artikel hinzufügenLagerbestand prüfenEinen Artikel verkaufenAlles zusammenfügen11Abschluss-Herausforderungen
Wiederholung - Einzigartige ElementeWiederholung - Benutzerprofil-ValidatorWiederholung - Noten-Zusammenfassung3Kommandozeilen-To-Do-Liste
Projekt-SetupEine Aufgabe hinzufügenAlle Aufgaben anzeigenEine Aufgabe entfernenFinaler Code