Rustには例外処理もnullもありませんが、これはRustの思想そのもの。例外処理やnullが無い代わりに、その機能をサポートする手段として、enumとしてのResultやOptionがあるということになります。
https://doc.rust-lang.org/std/option/
を参照すると、”Type Option
represents an optional value: every Option
is either Some
and contains a value, or None
, and does not.“であり、Rustでは標準的に使われる機能になります。
とありますが、Optionは実は、以下のようなenumになっていて要素としてはNoneとSome(T)が存在してます。
pub enum Option {
None,
Some(T),
}
通例では、Optionはパターンマッチングと一緒に使われて、rust-lang.orgの以下のサンプルコードを見ると、match resultでマッチング処理を行なっています。
fn main(){
fn divide(numerator: f64, denominator: f64) -> Option {
if denominator == 0.0 {
None
} else {
Some(numerator / denominator)
}
}
// The return value of the function is an option
let result = divide(10.5, 1.5);
// Pattern match to retrieve the value
match result {
// The division was valid
Some(x) => println!("Result: {x}"),
// The division was invalid
None => println!("Cannot divide by 0"),
}
}
Optionに限らずResultも類似のやり方で処理されます。
いずれにしてもRust固有の記法というように見えます。
admin