Jump to content

Unit type: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
ToohrVyk (talk | contribs)
ToohrVyk (talk | contribs)
Line 10: Line 10:
Several computer [[programming language]]s provide a unit type to specify the result type of a [[function (computer science)|function]] with the sole purpose of causing a [[side effect (computer science)|side effect]], and the argument type of a function that does not require arguments. In the [[functional programming]] languages [[Haskell (programming language)|Haskell]] and [[Clean programming language|Clean]], the unit type is called <code>()</code> and its only value is also <code>()</code>, reflecting the 0-tuple interpretation. In [[ML programming language|ML]], the type is called <code>unit</code> but the value is written as <code>()</code>.
Several computer [[programming language]]s provide a unit type to specify the result type of a [[function (computer science)|function]] with the sole purpose of causing a [[side effect (computer science)|side effect]], and the argument type of a function that does not require arguments. In the [[functional programming]] languages [[Haskell (programming language)|Haskell]] and [[Clean programming language|Clean]], the unit type is called <code>()</code> and its only value is also <code>()</code>, reflecting the 0-tuple interpretation. In [[ML programming language|ML]], the type is called <code>unit</code> but the value is written as <code>()</code>.


In [[C programming language|C]], [[C++]], [[C sharp|C#]], and [[Java (programming language)|Java]], <code>[[void return type|void]]</code> expresses the unit type. These languages do not provide any way to declare an object or represent a value with type <code>void</code>. In practice this feature is usually not necessary because all expressions with the unit type have the same value, and explicit values are therefore redundant. However, it may cause problems in generic programming, such as C++ [[template (programming)|templates]], where [[void]] must be treated differently from other types.
In [[C programming language|C]], [[C++]], [[C sharp|C#]], and [[Java (programming language)|Java]], <code>[[void return type|void]]</code> expresses the unit type. These languages do not provide any way to declare an object or represent a value with type <code>void</code>. In practice this feature is usually not necessary because all expressions with the unit type have the same value, and explicit values are therefore redundant. However, it may cause problems in generic programming, such as C++ [[template (programming)|templates]], where <code>[[void return type|void]]</code> must be treated differently from other types.


==References==
==References==

Revision as of 15:25, 6 March 2007

A unit type is a mathematical type that allows only one value (and thus can hold no information).

The carrier (underlying set) associated with a unit type can be any singleton set. There is an isomorphism between any two such sets, so it is customary to talk about the unit type and ignore the details of its value. One may also regard the unit type as the type of 0-tuples, i.e. the cartesian product of no types.

When applying category theory to types, the unit type is a terminal object in many set-based categories. The unit type should not be confused with the zero or bottom type, which allows no values and is the initial object in these categories.

Unit type in programming languages

Several computer programming languages provide a unit type to specify the result type of a function with the sole purpose of causing a side effect, and the argument type of a function that does not require arguments. In the functional programming languages Haskell and Clean, the unit type is called () and its only value is also (), reflecting the 0-tuple interpretation. In ML, the type is called unit but the value is written as ().

In C, C++, C#, and Java, void expresses the unit type. These languages do not provide any way to declare an object or represent a value with type void. In practice this feature is usually not necessary because all expressions with the unit type have the same value, and explicit values are therefore redundant. However, it may cause problems in generic programming, such as C++ templates, where void must be treated differently from other types.

References

  • Pierce, Benjamin, 2002. Types and Programming Languages. MIT Press. ISBN 0-262-16209-1