Menu
Coddy logo textTech

'match' mit 'Option' verwenden

Teil des Abschnitts Logic & Flow der Rust-Journey von Coddy — Lektion 36 von 66.

Nachdem Sie nun verstanden haben, was Option ist, lernen wir die gängigste und expliziteste Art und Weise kennen, damit umzugehen: die Verwendung eines match-Ausdrucks. Dieser Ansatz zwingt Sie dazu, beide möglichen Fälle zu berücksichtigen – wenn ein Wert vorhanden ist und wenn nicht.

Der match-Ausdruck funktioniert perfekt mit Option, da man Zweige für beide Varianten erstellen kann:

let maybe_name = Some("Alice".to_string());

match maybe_name {
    Some(name) => println!("Hello, {}!", name),
    None => println!("Hello, stranger!"),
}

Beachten Sie, wie der Some(name)-Zweig den Wert aus dem Inneren der Some-Variante extrahiert. Die Variable name enthält nun den eigentlichen String, nicht die Option. Dies wird als Destrukturierung bezeichnet – Sie ziehen den inneren Wert aus der Hülle heraus.

Der None-Zweig behandelt den Fall, in dem kein Wert vorhanden ist, was es Ihnen ermöglicht, ein alternatives Verhalten bereitzustellen, wie das Anzeigen einer Standardnachricht oder das Ausführen einer völlig anderen Aktion.

challenge icon

Aufgabe

Einfach

Sie erhalten einen Studentennamen als Eingabe. Der Name kann im System vorhanden sein oder fehlen. Erstellen Sie ein Option<String>, das Some(name) enthält, wenn der Name nicht leer ist, oder None, wenn der Name leer ist. Verwenden Sie einen match-Ausdruck, um beide Fälle zu behandeln und die entsprechende Nachricht auszugeben.

Anforderungen:

  • Lesen Sie die Eingabe als String (Studentenname) ein
  • Entfernen Sie alle Leerzeichen aus der Eingabe mit .trim()
  • Erstellen Sie eine Option<String>-Variable:
    • Wenn der bereinigte Name nicht leer ist, weisen Sie Some(name.to_string()) zu
    • Wenn der bereinigte Name leer ist, weisen Sie None zu
  • Verwenden Sie einen match-Ausdruck, um beide Varianten der Option zu behandeln
  • Geben Sie im Some(name)-Zweig Folgendes aus: Welcome, [name]!
  • Geben Sie im None-Zweig Folgendes aus: No name provided

Eingabe:

  • Eine einzelne Zeile, die entweder einen Studentennamen oder eine leere Zeile enthält

Ausgabe:

  • Wenn ein Name angegeben wird: Welcome, [name]!
  • Wenn kein Name angegeben wird (leere Eingabe): No name provided

Spickzettel

Verwenden Sie einen match-Ausdruck, um Option-Werte zu verarbeiten, indem Sie Zweige für beide Varianten erstellen:

let maybe_name = Some("Alice".to_string());

match maybe_name {
    Some(name) => println!("Hello, {}!", name),
    None => println!("Hello, stranger!"),
}

Der Some(name)-Zweig verwendet Destrukturierung, um den inneren Wert aus der Some-Variante zu extrahieren. Die Variable name enthält den tatsächlichen Wert, nicht den Option-Wrapper.

Der None-Zweig behandelt den Fall, in dem kein Wert vorhanden ist, was es Ihnen ermöglicht, ein alternatives Verhalten bereitzustellen.

Probier es selbst

use std::io;

fn main() {
    // Eingabe lesen
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let name = input.trim();
    
    // TODO: Erstelle ein Option<String> basierend darauf, ob der Name leer ist oder nicht
    
    // TODO: Verwende einen match-Ausdruck, um die Fälle Some und None zu behandeln und die entsprechende Nachricht auszugeben
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logic & Flow