0Pricing
Learn Rust Coding · Lektion

Enums mit Daten

Versehen Sie Varianten mit Werten.

Enums mit Daten ist eine kostenlose Learn Rust Coding-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. 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 4 Lektionen.

Varianten können Daten enthalten

Bisher waren unsere Varianten nur Namen. In Rust kann eine Variante auch Daten enthalten, die in Klammern stehen.

So kann ein einzelnes Enum sowohl die Art des Werts als auch den Wert selbst beschreiben.

enum Message {
    Quit,
    Move(i32, i32),
    Write(String),
}

Eine Variante mit einem Wert

Setzen Sie einen Typ in Klammern, um einer Variante ein Datenelement zuzuweisen.

Hier bedeutet Celsius(f64), dass die Variante Celsius eine f64-Zahl enthält. Diese Zahl geben Sie beim Erstellen des Werts an.

enum Temperature {
    Celsius(f64),
    Fahrenheit(f64),
}

fn main() {
    let t = Temperature::Celsius(21.5);
    println!("Created a temperature");
}

Varianten mit mehreren Werten

Eine Variante kann mehrere, durch Kommas getrennte Werte enthalten.

Move(i32, i32) speichert zwei Ganzzahlen, etwa eine x- und eine y-Koordinate. Sie übergeben beide beim Erstellen der Variante.

enum Shape {
    Circle(f64),
    Rectangle(f64, f64),
}

fn main() {
    let r = Shape::Rectangle(3.0, 4.0);
    println!("Made a rectangle");
}

Daten mit match extrahieren

Um die Daten innerhalb einer Variante zu lesen, benennen Sie sie im Muster. Die Namen werden zu Variablen, die Sie in diesem Arm verwenden können.

Hier bindet Shape::Circle(r) den gespeicherten Radius an r.

enum Shape {
    Circle(f64),
    Rectangle(f64, f64),
}

fn main() {
    let s = Shape::Circle(2.0);
    match s {
        Shape::Circle(r) => println!("radius {}", r),
        Shape::Rectangle(w, h) => println!("{} x {}", w, h),
    }
}

Gebundene Werte verwenden

Sobald Daten an einen Namen gebunden sind, können Sie damit wie mit jeder anderen Variablen Berechnungen durchführen.

Dieses Programm verarbeitet eine Form mit match und berechnet ihre Fläche, wobei das Ergebnis aus match zurückgegeben wird.

enum Shape {
    Circle(f64),
    Rectangle(f64, f64),
}

fn main() {
    let s = Shape::Rectangle(3.0, 4.0);
    let area = match s {
        Shape::Circle(r) => 3.14 * r * r,
        Shape::Rectangle(w, h) => w * h,
    };
    println!("area = {}", area);
}

Unterschiedliche Daten pro Variante

Jede Variante kann eine unterschiedlich strukturierte Datenmenge enthalten, und manche können völlig leer sein.

Diese Flexibilität macht Enums so ausdrucksstark: Ein Typ kann viele verschiedene Fälle modellieren.

enum Message {
    Quit,
    Move(i32, i32),
    Write(String),
}

Struct-ähnliche Varianten

Eine Variante kann wie ein Struct benannte Felder in geschweiften Klammern verwenden. Dadurch wird die Bedeutung jedes Feldes klar.

Sie erstellen sie, indem Sie jedes Feld benennen, und gleichen sie auf dieselbe Weise ab.

enum Event {
    Click { x: i32, y: i32 },
    KeyPress(char),
}

fn main() {
    let e = Event::Click { x: 10, y: 20 };
    match e {
        Event::Click { x, y } => println!("click at {},{}", x, y),
        Event::KeyPress(c) => println!("key {}", c),
    }
}

Strings in Varianten

Varianten können eigene Daten wie ein String enthalten. Beim Abgleichen erhalten Sie Zugriff auf den Text.

Hinweis: Beim Abgleichen nach Wert werden die Daten herausverschoben. Das ist hier unproblematisch, weil wir sie sofort verwenden.

enum Message {
    Write(String),
    Quit,
}

fn main() {
    let m = Message::Write(String::from("hello"));
    match m {
        Message::Write(text) => println!("text: {}", text),
        Message::Quit => println!("bye"),
    }
}

Das standardmäßige Option-Enum

Rusts integriertes Option<T> ist ein Enum mit Daten: Some(T) enthält einen Wert und None enthält nichts.

So stellt Rust „möglicherweise ein Wert“ dar, ohne null zu verwenden. Sie gleichen es genauso ab wie Ihre eigenen Enums.

fn main() {
    let maybe: Option<i32> = Some(5);
    match maybe {
        Some(n) => println!("got {}", n),
        None => println!("nothing"),
    }
}

Alles zusammenführen

Dieses vollständige Programm modelliert Temperaturen und wandelt anschließend innerhalb eines match einen Celsiuswert in Fahrenheit um.

Ändern Sie die Variante oder ihren Wert und führen Sie das Programm erneut aus.

enum Temperature {
    Celsius(f64),
    Fahrenheit(f64),
}

fn main() {
    let t = Temperature::Celsius(25.0);
    let f = match t {
        Temperature::Celsius(c) => c * 9.0 / 5.0 + 32.0,
        Temperature::Fahrenheit(f) => f,
    };
    println!("{} F", f);
}

Wann Sie Datenvarianten verwenden sollten

Verwenden Sie datenführende Varianten, wenn jeder Fall ganz natürlich mit zusätzlichen Informationen einhergeht.

  • Ein Circle benötigt einen Radius.
  • Eine Write-Nachricht benötigt ihren Text.
  • Ein Move benötigt Koordinaten.

Wenn die Daten mit der Variante gebündelt werden, bleiben zusammengehörige Informationen gemeinsam und typsicher.

Kurze Überprüfung

Überprüfen Sie Ihr Verständnis von Enums, die Daten enthalten.

Zusammenfassung

Sie haben gelernt, dass Enum-Varianten Daten enthalten können: einen einzelnen Wert, mehrere Werte, benannte structähnliche Felder oder gar keine Daten.

Sie greifen auf diese Daten zu, indem Sie sie in einem match-Muster benennen, etwa mit Circle(r). Der standardmäßige Typ Option funktioniert auf dieselbe Weise. Als Nächstes verfeinern Sie Abgleiche mit Guards und Bindings.

Häufig gestellte Fragen

Ist die Lektion „Enums mit Daten“ kostenlos?

Ja — der vollständige Text von „Enums mit Daten“ 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 4 Lektionen.

Was lerne ich in „Enums mit Daten“?

Versehen Sie Varianten mit Werten. 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 3 von 4.

Wie lange dauert die Lektion „Enums mit Daten“?

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. Ihr erstes Enum definieren
  2. Auf Enum-Varianten matchen
  3. Enums mit Daten
  4. Match-Guards und Bindings
← Zurück zu Learn Rust Coding