その他

【Rust】Resultについて

その他
この記事は約2分で読めます。

Rustにおけるエラー

Rustではエラーを大きく2種に区別します。

  1. recoverable
  2. 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