🔥

Rustのunwrap, unwrap_or, unwrap_or_elseの違い

2023/04/04に公開

概要

Rustには、Option型やResult型のようなエラーを表現する型があります。
これらの型は、値が存在しない(None)場合やエラーが発生した場合に、それを処理するためのメソッドを提供しています。
その中でも、unwrap、unwrap_or、unwrap_or_elseはよく使われます。

unwrap

Option型やResult型の値がSomeやOkであることを前提として、値を取り出します。
もしNoneやErrだった場合は、panic!マクロが呼ばれてプログラムがクラッシュします。
つまり、使用に際してはその型が必ず値を持っていることが保証されている場合に使用するべきです。

unwrap_or(default: T)

Option型やResult型の値がSomeやOkであれば、その値を取り出します。
もしNoneやErrだった場合は、指定されたデフォルト値を返します。
引数には、デフォルト値として使用する値を指定します。

unwrap_or_else(f: FnOnce() -> T)

Option型やResult型の値がSomeやOkであれば、その値を取り出します。
もしNoneやErrだった場合は、指定されたクロージャーを実行し、その結果を返します。
引数には、デフォルト値を生成するためのクロージャーを指定します。
このクロージャーは、値が必要になった場合にのみ呼び出されます。

まとめ

これらのメソッドは、Option型やResult型の値を安全に取り出すための方法を提供します。
unwrapは、値が必ず存在することが保証されている場合に使用するべきです。
unwrap_orは、デフォルト値を指定することで、値が存在しない場合の処理を安全に行うことができます。
unwrap_or_elseは、デフォルト値を生成するためのクロージャーを指定することで、値が必要になった場合にのみデフォルト値を生成することができます。

Discussion