Menu
Coddy logo textTech

Standardwert bereitstellen: unwrap_or

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

Während .unwrap() und .expect() Werte aus einem Option extrahieren können, haben beide einen entscheidenden Nachteil: Sie lösen eine Panic aus, wenn sie auf ein None stoßen. Für sichereren Code bietet Rust .unwrap_or() – eine Methode, die niemals eine Panic auslöst.

Die Methode .unwrap_or() nimmt einen Standardwert als Argument entgegen. Wenn das Option ein Some enthält, gibt sie den inneren Wert zurück. Wenn es ein None ist, gibt sie den von Ihnen bereitgestellten Standardwert zurück:

let maybe_score = Some(85);
let score = maybe_score.unwrap_or(0);
println!("Score: {}", score); // Gibt aus: Score: 85

let no_score: Option = None;
let default_score = no_score.unwrap_or(0);
println!("Score: {}", default_score); // Gibt aus: Score: 0

Dieser Ansatz ist viel sicherer als .unwrap(), da Ihr Programm niemals abstürzen wird – Sie erhalten immer einen brauchbaren Wert zurück.

challenge icon

Aufgabe

Einfach

Sie erhalten zwei Eingaben. Die erste Eingabe ist eine Punktzahl (als Zahl), und die zweite Eingabe gibt an, ob die Punktzahl verfügbar ist (yes) oder fehlt (no). Erstellen Sie ein Option<i32> basierend auf dem Verfügbarkeitsstatus. Verwenden Sie .unwrap_or(), um die Punktzahl sicher mit einem Standardwert von 50 zu extrahieren, und geben Sie dann die endgültige Punktzahl aus.

Anforderungen:

  • Lesen Sie die erste Eingabe (Punktzahl) ein und entfernen Sie Leerzeichen
  • Parsen Sie die erste Eingabe zu i32
  • Lesen Sie die zweite Eingabe (Verfügbarkeitsstatus) ein und entfernen Sie Leerzeichen
  • Erstellen Sie eine Option<i32> Variable:
    • Wenn der Verfügbarkeitsstatus yes ist, weisen Sie Some(score) zu
    • Wenn der Verfügbarkeitsstatus no ist, weisen Sie None zu
  • Verwenden Sie .unwrap_or(50), um die Punktzahl mit einem Standardwert von 50 zu extrahieren
  • Geben Sie die endgültige Punktzahl im Format Final score: [score] aus

Eingabe:

  • Erste Zeile: Eine Zahl, die die Punktzahl darstellt (z. B. 85)
  • Zweite Zeile: Entweder yes oder no

Ausgabe:

  • Wenn der Verfügbarkeitsstatus yes ist: Final score: [score] (die tatsächliche Punktzahl)
  • Wenn der Verfügbarkeitsstatus no ist: Final score: 50 (der Standardwert)

Spickzettel

Die Methode .unwrap_or() bietet eine sichere Möglichkeit, Werte aus einem Option-Typ zu extrahieren, ohne eine Panic auszulösen. Sie nimmt einen Standardwert als Argument entgegen und gibt entweder den inneren Wert zurück, falls Some vorliegt, oder den Standardwert, falls None vorliegt:

let maybe_score = Some(85);
let score = maybe_score.unwrap_or(0);
// score ist 85

let no_score: Option<i32> = None;
let default_score = no_score.unwrap_or(0);
// default_score ist 0

Diese Methode ist sicherer als .unwrap() oder .expect(), da sie niemals eine Panic verursacht – Sie erhalten immer einen verwendbaren Wert.

Probier es selbst

use std::io;

fn main() {
    // Den Punktestand einlesen
    let mut score_input = String::new();
    io::stdin().read_line(&mut score_input).expect("Failed to read line");
    let score: i32 = score_input.trim().parse().expect("Invalid number");
    
    // Den Verfügbarkeitsstatus einlesen
    let mut availability = String::new();
    io::stdin().read_line(&mut availability).expect("Failed to read line");
    let availability = availability.trim();
    
    // TODO: Schreiben Sie Ihren Code unten
    // Erstellen Sie ein Option<i32> basierend auf dem Verfügbarkeitsstatus
    // Verwenden Sie .unwrap_or(50), um den endgültigen Punktestand zu erhalten
    
    
    // Das Ergebnis ausgeben
    println!("Final score: {}", final_score);
}
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