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: 0Dieser Ansatz ist viel sicherer als .unwrap(), da Ihr Programm niemals abstürzen wird – Sie erhalten immer einen brauchbaren Wert zurück.
Aufgabe
EinfachSie 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
yesist, weisen SieSome(score)zu - Wenn der Verfügbarkeitsstatus
noist, weisen SieNonezu
- Wenn der Verfügbarkeitsstatus
- Verwenden Sie
.unwrap_or(50), um die Punktzahl mit einem Standardwert von50zu 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
yesoderno
Ausgabe:
- Wenn der Verfügbarkeitsstatus
yesist:Final score: [score](die tatsächliche Punktzahl) - Wenn der Verfügbarkeitsstatus
noist: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 0Diese 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);
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logic & Flow
1Fortgeschrittener Kontrollfluss
Der 'match'-AusdruckAbgleichen mehrerer WerteBereiche abgleichenDer 'if let'-AusdruckSchleifen als AusdrückeRückblick – Einfacher Befehls-Parser4Daten gruppieren mit Structs
Was ist ein Struct?Übersicht über StructsZugriff auf Struct-FelderVeränderbare StructsStructs als FunktionsparameterTupel-StructsZusammenfassung – Ein Buch-Struct erstellen2Einführung in Vektoren
Was ist ein Vektor?Einen Vektor erstellenElemente mit push hinzufügenZugriff auf Vektor-ElementeÜber einen Vektor iterierenVeränderliche IterationElemente entfernenZusammenfassung – Einfacher Score-Tracker5Schlüssel-Wert-Paare mit Hash Maps
Was ist eine Hash Map?Erstellen einer Hash MapEinfügen von Schlüssel-Wert-PaarenZugreifen auf WerteIterieren über eine Hash MapAktualisieren eines WertesEntfernen eines PaaresZusammenfassung – Wortzähler8Projekt: Einfaches Artikelinventar
Projekt-SetupEinen Artikel hinzufügenLagerbestand prüfenEinen Artikel verkaufenAlles zusammenfügen11Abschluss-Herausforderungen
Wiederholung - Einzigartige ElementeWiederholung - Benutzerprofil-ValidatorWiederholung - Noten-Zusammenfassung3Kommandozeilen-To-Do-Liste
Projekt-SetupEine Aufgabe hinzufügenAlle Aufgaben anzeigenEine Aufgabe entfernenFinaler Code6Umgang mit fehlenden Werten mit 'Option'
Was ist ein 'Option'?'match' mit 'Option' verwendenis_some() und is_none()Ein 'Option' entpackenDie 'expect'-MethodeStandardwert bereitstellen: unwrap_orRückblick – Ein Element finden