Direkt zum Hauptinhalt springen
eLearner.app
Modul 4 · Lektion 1 von 27/14 im Kurs~12 min
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:

Code
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:

Code
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:

Code
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:

  1. 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);
    
  2. 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

Übung#rust.m4.l1.e1
Versuche: 0Wird geladen…

Definieren Sie die Struct User über der main-Methode mit den Feldern: username (vom Typ String) und active (vom Typ bool).

Editor wird geladen…
Hinweis anzeigen

Schreiben Sie `struct User { username: String, active: bool }`vor`main`.

Lösung nach 3 Versuchen verfügbar

Übung#rust.m4.l1.e2
Versuche: 0Wird geladen…

Ändern Sie user1, indem Sie sie veränderlich machen (let mut user1), und ändern Sie das Feld active vor der Ausgabe auf false.

Editor wird geladen…
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

Übung#rust.m4.l1.e3
Versuche: 0Wird geladen…

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.

Editor wird geladen…
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