Menu
Coddy logo textTech

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.

challenge icon

Aufgabe

Einfach

Sie 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 success ist, weisen Sie Ok(parsed_number) zu
    • Wenn der Status failure ist, weisen Sie Err("Operation failed") zu
  • Verwenden Sie .is_ok(), um zu prüfen, ob das Ergebnis erfolgreich ist:
    • Wenn wahr, geben Sie aus: Success detected
  • Verwenden Sie .is_err(), um zu prüfen, ob das Ergebnis ein Fehler ist:
    • Wenn wahr, geben Sie aus: Error detected

Eingabe:

  • Erste Zeile: Eine Zahl (z. B. 42)
  • Zweite Zeile: Entweder success oder failure

Ausgabe:

  • Wenn der Status success ist: Success detected
  • Wenn der Status failure ist: Error detected

Spickzettel

Rust bietet zwei Methoden an, um den Status eines Result zu prüfen, ohne dessen Werte zu extrahieren:

  • .is_ok() - gibt true zurück, wenn das Result Ok ist, andernfalls false
  • .is_err() - gibt true zurück, wenn das Result Err ist, andernfalls false
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
}
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