Menu
Coddy logo textTech

Ein 'Option' entpacken

Teil des Abschnitts Logik & Kontrollfluss der Rust-Journey von Coddy. Lektion 38 von 66.

Manchmal müssen Sie den tatsächlichen Wert aus einem Option extrahieren, wenn Sie sicher sind, dass es ein Some enthält. Rust bietet die .unwrap()-Methode für diesen Zweck an – sie nimmt den Wert aus einem Some heraus und gibt ihn Ihnen direkt.

let maybe_number = Some(42);
let actual_number = maybe_number.unwrap();
println!("The number is: {}", actual_number);

Wenn Sie .unwrap() auf ein Some(value) aufrufen, gibt es den inneren Wert zurück. Im obigen Beispiel wird actual_number zu 42 – nicht mehr in einem Option eingeschlossen.

Es gibt jedoch eine kritische Warnung: Wenn Sie .unwrap() auf einem None aufrufen, wird Ihr Programm eine Panic auslösen und sofort abstürzen. Dies macht .unwrap() zu einer potenziell gefährlichen Methode, die nur verwendet werden sollte, wenn Sie absolut sicher sind, dass das Option ein Some enthält.

let empty_option: Option<i32> = None;
let value = empty_option.unwrap(); // Dies wird eine Panic auslösen!

Verwenden Sie .unwrap() sparsam und nur in Situationen, in denen Sie garantieren können, dass das Option einen Wert enthält, wie zum Beispiel in einfachen Beispielen oder wenn Sie bereits mit .is_some() geprüft haben.

challenge icon

Aufgabe

Einfach

Du erhältst zwei Eingaben. Die erste Eingabe ist eine Zahl (als Zeichenkette), und die zweite Eingabe gibt an, ob diese Zahl als gültig oder ungültig behandelt werden soll. Wenn die zweite Eingabe valid ist, erstelle ein Option<i32>, das Some mit der geparsten Zahl enthält. Wenn die zweite Eingabe invalid ist, erstelle ein Option<i32>, das None enthält. Verwende .unwrap(), um den Wert aus dem Option zu extrahieren, und gib ihn aus.

Anforderungen:

  • Lies die erste Eingabe und entferne Leerzeichen
  • Lies die zweite Eingabe und entferne Leerzeichen
  • Parse die erste Eingabe mit .parse::<i32>() zu i32
  • Erstelle eine Variable vom Typ Option<i32>:
    • Wenn die zweite Eingabe valid ist, weise Some(parsed_number) zu
    • Wenn die zweite Eingabe invalid ist, weise None zu
  • Verwende .unwrap(), um den Wert aus dem Option zu extrahieren
  • Gib den entpackten Wert im Format Value: [number] aus

Eingabe:

  • Erste Zeile: Eine Zahl als Zeichenkette (z. B. 42)
  • Zweite Zeile: Entweder valid oder invalid

Ausgabe:

  • Wenn die zweite Eingabe valid ist: Value: [number]
  • Wenn die zweite Eingabe invalid ist: Das Programm wird einen Panic auslösen (dieses Verhalten wird für diese Aufgabe erwartet)

Hinweis: Wenn die zweite Eingabe invalid ist, führt der Aufruf von .unwrap() auf None zu einem Panic. Dies veranschaulicht die gefährliche Natur von .unwrap(), wenn du nicht sicher bist, ob das Option einen Wert enthält.

Probier es selbst

use std::io;

fn main() {
    // Erste Eingabe lesen (Zahl als String)
    let mut number_input = String::new();
    io::stdin().read_line(&mut number_input).expect("Failed to read line");
    let number_input = number_input.trim();
    
    // Zweite Eingabe lesen (valid oder invalid)
    let mut validity_input = String::new();
    io::stdin().read_line(&mut validity_input).expect("Failed to read line");
    let validity_input = validity_input.trim();
    
    // Die Zahl parsen
    let parsed_number: i32 = number_input.parse().expect("Failed to parse number");
    
    // TODO: Schreiben Sie Ihren Code unten
    // Erstellen Sie ein Option<i32> basierend auf validity_input
    // Wenn validity_input "valid" ist, weisen Sie Some(parsed_number) zu
    // Wenn validity_input "invalid" ist, weisen Sie None zu
    // Verwenden Sie dann .unwrap(), um den Wert zu extrahieren und geben Sie ihn im Format aus: Value: [number]
    
}
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 Logik & Kontrollfluss

Übe selbstständig: Online-Rust-Compiler