Rustにおけるエラー
Rustではエラーを大きく2種に区別します。
- recoverable
- unrecoverable
他の言語では、この2つを1つの例外と捉える場合はほとんどですが、Rustでは2つを区別することで、プログラムの実行前に詳細にエラーハンドリングを検討します。
厳密には『例外』は存在せず、Result
というEnum
型になっています。
Result型
Result型に含まれるのは、以下の2つです。
enum Result<T, E> {
Ok(T),
Err(E),
}
unwrap
Result.unwrap は Ok なら中の値を返し、Err なら panic を起こします。
let listener = TcpListener::bind(&self.addr).unwrap();
TcpListener::bind(addr)
は引数に渡されたアドレスでTCPリスナーを作成します。
すでに指定されたアドレスやポートが使われている場合など、成功と失敗の場合があります。
従って返り値はResult
になっています。
unwrap
しているので、
– Ok
ならリスナーは無事作成され変数に格納されます。
– Err
ならその時点でパニックとなり、プログラムは強制終了します。
ちなみにVSCodeでメソッドをマウスホバーするとデカデカとPanic
の可能性を伝えてくれます。
![スクリーンショット 2020-12-05 0.06.47.png](https://i0.wp.com/qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F664546%2F484a24fc-f8e5-8b20-e18d-630b27980e4e.png?w=1320&ssl=1)