Menu
Coddy logo textTech

Die 'expect'-Methode

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

Während .unwrap() seine Aufgabe erfüllt, hat es einen großen Nachteil: Wenn es bei einem None einen Panic auslöst, ist die Fehlermeldung generisch und wenig hilfreich. Hier kommt .expect() zur Rettung.

Die Methode .expect() funktioniert genau wie .unwrap() – sie extrahiert den Wert aus einem Some und löst bei einem None eine Panic aus. Der Hauptunterschied besteht darin, dass .expect() es Ihnen ermöglicht, eine benutzerdefinierte Panic-Nachricht anzugeben:

let maybe_score = Some(95);
let score = maybe_score.expect("Score should always be present");
println!("Your score is: {}", score);

Wenn das Option ein Some enthält, gibt .expect() den inneren Wert zurück, genau wie .unwrap(). Wenn es jedoch ein None ist, sehen Sie anstelle einer generischen Panic-Meldung Ihre benutzerdefinierte Nachricht, was es viel einfacher macht zu verstehen, was schiefgelaufen ist und wo.

challenge icon

Aufgabe

Einfach

Du erhältst zwei Eingaben. Die erste Eingabe ist ein Produktname, und die zweite Eingabe gibt an, ob das Produkt auf Lager ist (yes) oder nicht auf Lager ist (no). Erstelle ein Option<String>, das Some(product_name) enthält, wenn das Produkt auf Lager ist, oder None, wenn es nicht auf Lager ist. Verwende .expect() mit einer aussagekräftigen Meldung, um den Produktnamen zu extrahieren und auszugeben.

Anforderungen:

  • Lies die erste Eingabe (Produktname) ein und entferne Leerzeichen
  • Lies die zweite Eingabe (Lagerstatus) ein und entferne Leerzeichen
  • Erstelle eine Variable vom Typ Option<String>:
    • Wenn der Lagerstatus yes ist, weise Some(product_name.to_string()) zu
    • Wenn der Lagerstatus no ist, weise None zu
  • Verwende .expect() mit der Meldung "Product should be in stock", um den Produktnamen zu extrahieren
  • Gib den extrahierten Produktnamen im Format Product available: [product_name] aus

Eingabe:

  • Erste Zeile: Ein Produktname (z. B. Laptop)
  • Zweite Zeile: Entweder yes oder no

Ausgabe:

  • Wenn der Lagerstatus yes ist: Product available: [product_name]
  • Wenn der Lagerstatus no ist: Das Programm bricht mit der benutzerdefinierten Meldung „Product should be in stock“ ab (dieses Verhalten wird für diese Aufgabe erwartet)

Hinweis: Wenn der Lagerstatus no ist, verursacht der Aufruf von .expect() auf None einen Abbruch mit deiner benutzerdefinierten Meldung. Dies veranschaulicht, wie .expect() im Vergleich zu .unwrap() hilfreichere Fehlerinformationen liefert.

Probier es selbst

use std::io;

fn main() {
    // Produktnamen lesen
    let mut product_name = String::new();
    io::stdin().read_line(&mut product_name).expect("Failed to read line");
    let product_name = product_name.trim();
    
    // Lagerstatus lesen
    let mut stock_status = String::new();
    io::stdin().read_line(&mut stock_status).expect("Failed to read line");
    let stock_status = stock_status.trim();
    
    // TODO: Schreiben Sie Ihren Code unten
    // Erstellen Sie ein Option<String> basierend auf stock_status
    // Verwenden Sie .expect(), um den Produktnamen zu extrahieren
    // Geben Sie das Ergebnis im Format aus: Product available: [product_name]
    
}
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