Inhalt

Tag 2 - Result Typ und Fehlerbehandlung

Inhalt

Heute habe ich einmal mit dem Thema Fehlerbrhandlung rumexperimentiert. Einer von mehreren Wegen in Rust ist der Result Typ. Dabei handelt es sich um ein enum, dass entweder einen Wert für den Erfolgsfall oder einen Fehler enthält.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
use std::string::String;

#[derive(Debug)]
struct Person {
    name: String,
    age: i32,
}

impl Person {
    fn hello(&self) -> Result<String, &str>{
        if self.name != "" {
            let ret = format!("{} is {} years old.", self.name, self.age);
            Ok(ret)
        } else {
            Err("No name given")
        }
        
    }
}

fn main() {
    let bob = Person {
        name: String::from("Bob"),
        age: 32,
    };
    let res = bob.hello().unwrap(); // will consume the Ok value or panic in case of error
    println!("{:?}", res);
    
    let mary = Person {
        name: String::from(""),
        age: 30,
    };
    let res1 = mary.hello().unwrap(); // will consume the Ok value or panic in case of error
    println!("{:?}", res1); 
}

Die Rückgabe der Methode hello wird als **Result<String, &str> **definiert. Innerhalb der if Anweisung geben wir im Erfolgsfall durch Ok(ret) den String zurück. Andernfalls über Err(”…") eine Fehlermeldung.

Durch das Anhängen der Methode unwrap() wird der zurückgelieferte Result Typ entpackt. Im Falle eines Fehler führt unwrap() zu einer Panik. Die Ausgabe sieht dann so aus:

1
2
3
4
5
6
7
8
9
Standard Error:
Compiling playground v0.0.1 (/playground)
    Finished dev [unoptimized + debuginfo] target(s) in 1.05s
     Running `target/debug/playground`
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: "No name given"', src/main.rs:33:29
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Standard Output:
"Bob is 32 years old."

Das ist denke ich erstmal nur der Einstieg. Die Methode unwrap() zu verwenden ist zwar schnell und bequem, aber man will ja in den wenigsten Fällen das Programm mit einer Panik enden lassen, dazu dann nochmal mehr…

Dieser Beitrag ist Teil 7 von 100 Days To Offload. Wenn Du mitmachen willst, besuche https://100daystooffload.com

Dies ist Tag 1 / 100 von #100DaysOfCode