0Pricing
Learn Rust Coding · Lektion

Structs definieren und verwenden

Erstellen Sie mit Structs eigene Datenstrukturen, einschließlich Tuple-Structs und Unit-ähnlicher Structs, um zusammengehörige Daten zu gruppieren.

Structs definieren und verwenden ist eine kostenlose Learn Rust Coding-Lektion auf CoddyKit. Dies ist Lektion 1 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Learn Rust Coding-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Learn Rust Coding-Kurs umfasst insgesamt 3 Lektionen.

Structs kennenlernen: Benutzerdefinierte Datentypen

In Rust bieten Structs (kurz für Strukturen) eine Möglichkeit, benutzerdefinierte Datentypen zu erstellen, mit denen Sie mehrere zusammengehörige Werte benennen und zu einer sinnvollen Gruppe zusammenfassen können.

Stellen Sie sich ein Struct als Bauplan für einen Benutzer, eine Farbe oder einen Punkt im Raum vor. Statt separate Variablen für den Namen, die E-Mail-Adresse und das Alter eines Benutzers zu verwenden, können Sie alle Werte in einem User-Struct zusammenfassen.

Das hilft Ihnen, Ihre Daten logisch zu organisieren und Ihren Code leichter lesbar und wartbar zu machen.

Ein klassisches Struct definieren

Der häufigste Struct-Typ ist ein klassisches Struct, bei dem Sie jedes Datenelement benennen, das als Feld bezeichnet wird. So definieren Sie ein solches Struct:

struct User {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
}

fn main() {
    // This code only defines the struct blueprint.
    // No actual user has been created yet!
    println!("Struct 'User' blueprint defined.");
}

Struct-Instanzen erstellen

Nachdem Sie ein Struct definiert haben, können Sie konkrete Instanzen davon erstellen. Jede Instanz enthält bestimmte Werte für ihre Felder. Sie erstellen eine Instanz, indem Sie für jedes Feld konkrete Werte angeben.

struct User {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
}

fn main() {
    let user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };
    println!("User instance created!");
}

Auf Struct-Felder zugreifen

Um Daten aus einer Struct-Instanz abzurufen, verwenden Sie die Punktnotation. Schreiben Sie einfach den Namen der Instanz, einen Punkt (.) und anschließend den Feldnamen.

struct User {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
}

fn main() {
    let user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };
    println!("User's username: {}", user1.username);
    println!("User's email: {}", user1.email);
}

Veränderlichkeit bei Structs

Genau wie reguläre Variablen können auch vollständige Struct-Instanzen mithilfe des Schlüsselworts mut veränderbar gemacht werden. Wenn eine Instanz veränderbar ist, können alle ihre Felder geändert werden.

Sie können nicht nur bestimmte Felder veränderbar machen; die Veränderbarkeit gilt immer für die gesamte Struct-Instanz.

struct User {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
}

fn main() {
    let mut user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };
    
    println!("Old email: {}", user1.email);
    user1.email = String::from("new_alice@example.com");
    println!("New email: {}", user1.email);
}

Tuple-Structs: Unbenannte Felder

Tuple-Structs sind eine weitere Struct-Form. Sie sehen wie Tupel aus, haben aber einen Namen. Sie sind nützlich, wenn Sie einem Tupel einen eigenen Typnamen geben möchten, die einzelnen Felder aber nicht benennen müssen.

Color(i32, i32, i32) ist beispielsweise ein benanntes Tupel, das drei Ganzzahlen gruppiert.

struct Color(i32, i32, i32);
struct Point(i32, i32, i32);

fn main() {
    let black = Color(0, 0, 0);
    let origin = Point(0, 0, 0);
    println!("Tuple structs 'Color' and 'Point' defined.");
}

Tuple-Structs verwenden

Das Erstellen einer Instanz eines Tuple-Structs ähnelt dem Erstellen eines regulären Tupels. Um auf die enthaltenen Werte zuzugreifen, verwenden Sie die Punktnotation mit ihrem Index, beginnend bei 0.

struct Color(i32, i32, i32);
struct Point(i32, i32, i32);

fn main() {
    let black = Color(0, 0, 0);
    let origin = Point(0, 0, 0);

    println!("Black color: R={}, G={}, B={}", black.0, black.1, black.2);
    println!("Origin point: X={}, Y={}, Z={}", origin.0, origin.1, origin.2);
}

Unit-ähnliche Structs: Marker

Sie können auch Structs definieren, die überhaupt keine Felder haben. Diese werden als unit-ähnliche Structs bezeichnet, weil sie sich ähnlich wie der Unit-Typ () verhalten.

Sie werden häufig als Marker verwendet, um einen bestimmten Trait für einen Typ zu implementieren, wenn die Daten selbst nicht wichtig sind.

struct AlwaysTrue;

fn main() {
    let subject = AlwaysTrue;
    // Unit-like structs don't store data directly,
    // but they can be instantiated and used as types.
    println!("Unit-like struct 'AlwaysTrue' created.");
}

Struct-Update-Syntax

Wenn Sie eine neue Struct-Instanz auf Grundlage einer vorhandenen erstellen, aber nur einige Feldwerte ändern möchten, bietet Rust eine praktische Struct-Update-Syntax (..).

Diese Syntax verschiebt die übrigen Felder aus der angegebenen Instanz. Daher kann die ursprüngliche Instanz nicht mehr verwendet werden, wenn sie Felder enthält, die Copy implementieren.

struct User {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
}

fn main() {
    let user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };

    let user2 = User {
        email: String::from("bob@example.com"),
        username: String::from("bob456"),
        ..user1 // Copy remaining fields from user1
    };

    println!("User 2 email: {}", user2.email);
    println!("User 2 active: {}", user2.active);
    // user1.username is now moved, so user1 can't be used here.
}

Structs-Quiz

Testen Sie Ihr Verständnis von Rust-Structs.

Zusammenfassung: Structs im Überblick

Sie haben gelernt, wie man Structs in Rust definiert und verwendet!

  • Klassische Structs gruppieren benannte Felder, um benutzerdefinierte Datentypen zu erstellen.
  • Tuple-Structs sind benannte Tupel und nützlich, wenn Feldnamen nicht unbedingt erforderlich sind.
  • Unit-ähnliche Structs haben keine Felder und dienen als Marker.
  • Struct-Instanzen können mit mut veränderbar gemacht werden, damit ihre Felder geändert werden können.
  • Mit der Syntax .. lassen sich neue Instanzen aus vorhandenen erstellen.

Structs sind grundlegend für die Organisation zusammengehöriger Daten in Rust-Programmen und machen Ihren Code strukturierter und lesbarer.

Häufig gestellte Fragen

Ist die Lektion „Structs definieren und verwenden“ kostenlos?

Ja — der vollständige Text von „Structs definieren und verwenden“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Learn Rust Coding-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Learn Rust Coding-Kurs umfasst insgesamt 3 Lektionen.

Was lerne ich in „Structs definieren und verwenden“?

Erstellen Sie mit Structs eigene Datenstrukturen, einschließlich Tuple-Structs und Unit-ähnlicher Structs, um zusammengehörige Daten zu gruppieren. Du übst Learn Rust Coding mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Learn Rust Coding zu starten?

Keine Vorkenntnisse erforderlich. Learn Rust Coding auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 3.

Wie lange dauert die Lektion „Structs definieren und verwenden“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Learn Rust Coding-Lektion Code schreiben und ausführen?

Ja. Jede Learn Rust Coding-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Structs definieren und verwenden
  2. Enums für eigene Datentypen
  3. Leistungsfähiges Pattern Matching
← Zurück zu Learn Rust Coding