is_ok() und is_err()
Teil des Abschnitts Logic & Flow der Rust-Journey von Coddy — Lektion 44 von 66.
Manchmal müssen Sie schnell prüfen, ob ein Result Erfolg oder Misserfolg darstellt, ohne die tatsächlichen Werte zu extrahieren. Rust bietet hierfür zwei praktische Methoden an: .is_ok() und .is_err().
Beide Methoden geben einen booleschen Wert zurück, was sie perfekt für einfache bedingte Prüfungen macht. Die Methode .is_ok() gibt true zurück, wenn das Result Ok ist, und false, wenn es Err ist. Die Methode .is_err() funktioniert umgekehrt:
let success: Result = Ok(42);
let failure: Result = Err("Something went wrong");
if success.is_ok() {
println!("Operation succeeded!");
}
if failure.is_err() {
println!("Operation failed!");
}Diese Methoden sind besonders nützlich, wenn Sie nur den Status des Ergebnisses kennen müssen, ohne sich um die spezifischen Werte darin zu kümmern. Im Gegensatz zu match verbrauchen sie das Result nicht, sodass Sie es danach immer noch verwenden können.
Aufgabe
EinfachSie erhalten zwei Eingaben. Die erste Eingabe ist eine Zahl (als String) und die zweite Eingabe ist ein Statusindikator (success oder failure). Erstellen Sie ein Result<i32, &'static str> basierend auf dem Status. Wenn der Status success ist, erstellen Sie ein Ok, das die parste Zahl enthält. Wenn der Status failure ist, erstellen Sie ein Err mit der Nachricht "Operation failed". Verwenden Sie .is_ok() und .is_err(), um den Ergebnisstatus zu prüfen und die entsprechende Nachricht auszugeben.
Anforderungen:
- Lesen Sie die erste Eingabe (Zahl) ein und entfernen Sie Leerzeichen
- Parsen Sie die erste Eingabe in
i32 - Lesen Sie die zweite Eingabe (Status) ein und entfernen Sie Leerzeichen
- Erstellen Sie eine
Result<i32, &'static str>Variable:- Wenn der Status
successist, weisen SieOk(parsed_number)zu - Wenn der Status
failureist, weisen SieErr("Operation failed")zu
- Wenn der Status
- Verwenden Sie
.is_ok(), um zu prüfen, ob das Ergebnis erfolgreich ist:- Wenn wahr, geben Sie aus:
Success detected
- Wenn wahr, geben Sie aus:
- Verwenden Sie
.is_err(), um zu prüfen, ob das Ergebnis ein Fehler ist:- Wenn wahr, geben Sie aus:
Error detected
- Wenn wahr, geben Sie aus:
Eingabe:
- Erste Zeile: Eine Zahl (z. B.
42) - Zweite Zeile: Entweder
successoderfailure
Ausgabe:
- Wenn der Status
successist:Success detected - Wenn der Status
failureist:Error detected
Spickzettel
Rust bietet zwei Methoden an, um den Status eines Result zu prüfen, ohne dessen Werte zu extrahieren:
.is_ok()- gibttruezurück, wenn dasResultOkist, andernfallsfalse.is_err()- gibttruezurück, wenn dasResultErrist, andernfallsfalse
let success: Result<i32, &str> = Ok(42);
let failure: Result<i32, &str> = Err("Something went wrong");
if success.is_ok() {
println!("Operation succeeded!");
}
if failure.is_err() {
println!("Operation failed!");
}Diese Methoden sind nützlich für einfache bedingte Prüfungen, wenn Sie nur den Status des Ergebnisses wissen müssen. Im Gegensatz zu match verbrauchen sie das Result nicht, sodass Sie es danach weiterverwenden können.
Probier es selbst
use std::io;
fn main() {
// Die erste Eingabe lesen (Zahl)
let mut number_input = String::new();
io::stdin().read_line(&mut number_input).expect("Failed to read line");
let number_input = number_input.trim();
// Die Zahl in i32 umwandeln
let parsed_number: i32 = number_input.parse().expect("Failed to parse number");
// Die zweite Eingabe lesen (Status)
let mut status = String::new();
io::stdin().read_line(&mut status).expect("Failed to read line");
let status = status.trim();
// TODO: Erstelle ein Result<i32, &'static str> basierend auf dem Status
// Wenn der Status "success" ist, erstelle Ok(parsed_number)
// Wenn der Status "failure" ist, erstelle Err("Operation failed")
// TODO: Verwende .is_ok() und .is_err(), um das Ergebnis zu prüfen und die entsprechende Nachricht auszugeben
}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 erstellen7Fehlerbehandlung mit 'Result'
Was ist ein 'Result'?'match' mit 'Result' verwendenis_ok() und is_err()Abkürzungen: unwrap und expectDer Fragezeichen-Operator '?'Strings in Zahlen parsenZusammenfassung – Sichere Divisionsfunktion2Einfü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 Code