Progrust Library.

// 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

  1. The Rust Reference: Tuple types — フィールドが0個のタプル型はunit型、その値はunit値と呼ばれると述べています。

  2. The Rust Reference: Functions — 戻り値の型を明示しない場合はユニット型であると定義しています。

  3. std::mem::size_of — サイズ一覧表で()のサイズを0と明記しています。

この辞書が使われているページ

backlinks 16

  1. 辞書for式
  2. 辞書if let式
  3. 辞書if式
  4. 辞書loop式
  5. 辞書return式
  6. 辞書while式
  7. 辞書タプル型
  8. 辞書プリミティブ型
  9. 辞書ユニット様構造体
  10. 辞書関数
  11. 辞書
  12. 辞書
  13. 辞書包括パターン
  14. 動かして学ぶRustプログラミング問題集 › 第3章 制御フロー
  15. 動かして学ぶRustプログラミング問題集 › 第4章 関数
  16. 動かして学ぶRustプログラミング問題集 › 第9章 構造体