// dictionary
ユニット型.
ユニット型()は、()という唯一の値(ユニット値)だけを持つプリミティブ型です。「返すべき意味のある値がない」ことを表すための型で、要素が0個のタプル型でもあります1。戻り値の型を省略した関数は暗黙に()を返し2、式の末尾にセミコロンを付けて文にすると値は捨てられ、そのような文で終わるブロック式の値は()になります。
fn greet() { // 戻り値の型を省略 = 「-> ()」と書いたのと同じ
println!("いらっしゃいませ");
}
fn main() {
let result: () = greet(); // 戻り値 () を束縛できる(普段は書かない)
println!("{:?}", result); // 「()」と表示される
}Playgroundで開くユニット型が現れる場面
| 場面 | 例 | 説明 |
|---|---|---|
| 戻り値の型を省略した関数 | fn greet() { … } |
fn greet() -> () { … }と同じ意味 |
| 末尾に値を残さないブロック式 | { println!("…"); } |
最後が文で終わるブロックの値は() |
| 代入式の評価結果 | x = 5 |
代入式自体の値は代入した値ではなく() |
| 成功時に返す値がないResult型 | Result<(), Error> |
「成功したこと」だけを伝える |
補足
サイズ0の型(ZST)
ユニット型のサイズは0バイトで、実行時のメモリを一切占有しません(std::mem::size_of::<()>()は0を返します3)。このようにサイズが0の型はZST(Zero-Sized Type)と呼ばれ、ZSTを生成・格納する操作は多くの場合コンパイル時に無操作(no-op)へ最適化されます。
Footnotes
-
The Rust Reference: Tuple types — フィールドが0個のタプル型はunit型、その値はunit値と呼ばれると述べています。 ↩
-
The Rust Reference: Functions — 戻り値の型を明示しない場合はユニット型であると定義しています。 ↩
-
std::mem::size_of — サイズ一覧表で
()のサイズを0と明記しています。 ↩
この辞書が使われているページ
backlinks 16