Opentopia Directory Encyclopedia Tools

Enumerated type

Encyclopedia : E : EN : ENU : Enumerated type


In computer programming, an enumerated type is a data type whose set of values is a finite list of identifiers chosen by the programmer. Enumerated types make program source more self-documenting than the use of explicit magic numbers. Typically the compiler will select a small integer to represent each enumeration value at run-time, but this representation is not always visible to the programmer.

In some languages, the boolean type of truth values is considered a predeclared enumerated type of two values.

Pascal

In Pascal, an enumerated type can be implicitly declared by listing the values in a parenthesised list:

var
suit: (clubs, diamonds, hearts, spades);
value: 1 .. 13;
The declaration will often appear in a type synonym declaration, such that it can be used for multiple variables:

type
cardsuit = (clubs, diamonds, hearts, spades);
card = record
suit: cardsuit;
value: 1 .. 13;
end;
var
hand: array [ 1 .. 13 ] of card;
trump: cardsuit;
The order in which the enumeration values are given matters. An enumerated type is an ordinal type, and the prec and succ functions will give the prior or next value of the enumeration, and ord can convert enumeration values to their integer representation. Standard Pascal does not offer a conversion from arithmetic types to enumerations, however.

C and syntactically similar languages

The original K&R dialect of the C programming language did not have enumerated types, but they were added in the ANSI standard for C, which became C89. In C, enumerations are created by explicit definitions, which use the enum keyword and are reminiscent of struct and union definitions:

enum cardsuit ;
struct card  hand[13]
enum cardsuit trump;
C exposes the small-integer representation of enumeration values directly to the programmer. Integers and enum values can be mixed freely, and all arithmetic operations on enum values are permitted. It is even possible for an enum variable to hold an integer that does not represent any of the enumeration values. In fact, according to the language definition, the above code will define CLUBS, DIAMONDS, HEARTS, and SPADES as constants of type int, which will only be converted (silently) to enum cardsuit if and when they are stored in a variable of that type.

C also allows the programmer to choose the values of the enumeration constants explicitly. For example,

enum cardsuit ;
could be used to define a type that allows mathematical sets of suits to be represented as an enum cardsuit by bitwise logic operations.

Typeless languages in the syntactic tradition of C (e.g. perl or JavaScript) do not in general provide enumerations.

C++

C++ has enumeration types that are directly inherited from C's and work mostly like these.

Java

The J2SE version 5.0 of the Java programming language added enumerated types whose declaration syntax is similar to that of C's:

enum Cardsuit 
...
Cardsuit trump ;
The Java type system, however, treats enumerations as a type separate from integers, and intermixing of enum and integer values is not allowed. An enum type in Java behaves more like a class than an aritmetic type; it can even have instance methods (which can be specified to be different for each enumeration value).

C#

Enumerated types in the C# programming language preserve most of the "small integer" semantics of C's enums. Some arithmetic operations are not defined for enums, but an enum value can be explicitly converted to an integer and back again, and an enum variable can store values that were not declared by the enum definition. For example, given

enum cardsuit ;
the expressions DIAMONDS+1 and HEARTS-CLUBS are allowed directly (because it makes sense to step through the sequence of values or ask how many steps there are between two values), but HEARTS*SPADES is deemed to make less sense and is only allowed if the values are first converted to integers.

Algebraic data type in functional programming

In functional programming languages in the ML lineage (e.g., SML, OCaml and Haskell), an algebraic data type with only nullary constructors can be used to implement an enumerated type. For example (in the syntax of SML signatures):

datatype cardsuit = Clubs | Diamonds | Hearts | Spades
type card = 
val hand : card list
val trump : cardsuit
In these languages the small-integer representation is completely hidden from the programmer, if indeed such a representation is employed by the implementation. However, Haskell has the Enum type class which a type can derive or implement to get a mapping between the type and Int.

External Links

 


From Wikipedia, the Free Encyclopedia. Original article here. Support Wikipedia by contributing or donating.
All text is available under the terms of the GNU Free Documentation License See Wikipedia Copyrights for details.

Search Titles
0123456789
ABCDEFGHIJ
KLMNOPQRST
UVWXYZ?

E-mail this article to:

Personal Message: