跳至內容

單值類型

維基百科,自由的百科全書

數理邏輯計算機科學類型論中,單值類型(unit type)是只允許1個值的數據類型。單值類型的基礎集(underlying set)是單元素集合。由於任何2個單元素集合同構,因而習慣稱「這個單值集合」( the unit type),不必考慮具體的值是什麼。也可以把單值類型視作0-元組,如無類型的

單值類型是範疇論中類型和有類型函數的終對象,不應與 zero底類型英語bottom type混淆。後兩者允許no值,是範疇的始對象。類似的,布爾類型是有2個值的類型。

大多數函數式編程語言都實現了單值類型。一些指令式語言使用void類型,但其取值為空集,還是有所不同。

編程語言支持[編輯]

  • Haskell, Rust, Elm, 單值類型被稱作(),其僅有的值也寫作(), 解釋為0元組。
  • ML語言家族(包括OCaml, Standard ML, F#), 單值類型被稱作unit,但其值寫作().
  • Scala語言中,單值類型稱作Unit,其值寫作().
  • Common Lisp中,單值類型名字是NULL,其取值為NIL。不要與類型NIL混淆,該類型是底類型英語bottom type
  • Python中的類型NoneType,僅有的取值為None.
  • Swift中單值類型是Void(),其值寫作()
  • Java語言中單值類型為Void,其值寫作null.
  • Go語言中單值類型為struct{},其值寫作struct{}{}.
  • PHP中單值類型為null,其值寫作NULL
  • JavaScript中,類型Null (取值為null)和類型Undefined (取值為undefined)都是原生單值類型
  • Kotlin中單值類型為Unit,其值為Unit對象
  • Ruby中單值類型為NilClass,其值寫作nil
  • C++17中單值類型為std::monostate。更早版本可自定義空結構struct empty{}.

Void類型用作單值類型[編輯]

C語言, C++, C#, D, void用於指示函數不返回任何有用結果,或函數無參數。C語言中的單值類型在概念上類似於空struct,但C語言不允許無成員的結構(C++允許)。

真正的單值類型與void類型的使用區別,可以參見下例:

void f(void) {}
void g(void) {}

int main(void)
{
  f(g()); // compile-time error here
  return 0;
}

C++允許空類作為單值類型:

class unit_type {};
const unit_type the_unit;

unit_type f(unit_type) { return the_unit; }
unit_type g(unit_type) { return the_unit; }

int main()
{
  f(g(the_unit));
  return 0;
}

void類型不用占存儲。但單值類型在結構或類中是占一定空間存儲的。

參見[編輯]

參考文獻[編輯]