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
の可能性を伝えてくれます。