型コンストラクタとは
型コンストラクタとは、ざっくり言うと「新しい型を作るための型」です。
普段使っているi32
やString
などは、それ自体が完成された一つの型です。
一方、型コンストラクタは、型を引数として受け取り、新しい型を生成するものです。
例えば、RustのOption
はまさに型コンストラクタです。Option<T>
という形で、T
に任意の型(i32やStringなど)を渡すことで、Option<i32>
やOption<String>
という新しい型が作られます。
Option<T>
は、Some<T>
(値がある場合)かNone
(値がない場合)のどちらかを表すための型です。これにより、値が存在しない可能性を明示的に扱うことができ、Null参照のような予期せぬエラーを防ぐことができます。
Rustの型コンストラクタの例
RustでOption<T>
をどう使うのか、簡単な例で見てみましょう。
fn main() {
let some_number: Option<i32> = Some(5);
let no_number: Option<i32> = None;
match some_number {
Some(value) => println!("値は{}です。", value),
None => println!("値はありません。"),
}
match no_number {
Some(value) => println!("値は{}です。", value),
None => println!("値はありません。"),
}
}
このコードでは、Option<i32>
という型を使って、some_number
とno_number
という2つの変数を作成しています。
let some_number: Option<i32> = Some(5);
では、Option
という型コンストラクタにi32
を渡し、Option<i32>
という新しい型を作っています。
Some(5)
は、Option<i32>
型の値を生成する値コンストラクタです。
let no_number: Option<i32> = None;
のNone
は、Option<i32>型で値がないことを表す値です。
そして、match
文で、Option
の中身を安全に取り出しています。
このように、型コンストラクタを使うことで、より安全で表現力の高いコードを書くことができます。