Enumeration also Enum contains predefined constants or fixed values. It is also similar to Enum in another programming language.

## Nim Enum examples

Enum declared with simple values or with its values

Let’s declare a simple Enum

``````type
WEEKEND = enum
SUNDAY, SATURDAY
``````

By default, Enum values are ordered and assigned with values 0,1. The above declaration is an implicit order

ord(SUNDAY) or ord(WEEKEND.SUNDAY)=0 ord(SATURDAY) or ord(WEEKEND.SATURDAY)=1

``````echo ord(WEEKEND.SUNDAY)
echo ord(WEEKEND.SATURDAY)
``````

Let’s declare explicit Enum

``````type
WEEKEND = enum
SUNDAY=1,SATURDAY=2
``````

You can also define and declare Enums

``````type
WEEKEND = enum
SUNDAY = (1, "Sunday"),
SATURDAY = (2, "Saturday"),
``````

Enum can also be declared with `pure` pragma and all attributes are added without ENUM type

for non-ambiguous references.

Below example

• FRIDAY only exists WEEKEND type and non-ambiguous reference, These can be accessed without Type. WEEKEND.FRIDAY and FRIDAY both return FRIDAY
• SUNDAY, SATURDAY exists in both WEEKEND and WEEKEND1 and values are ambiguous. These can be accessed with WEEKEND.SUNDAY and WEEKEND.SATURDAY. and SUNDAY and SATURDAY return an error.
``````
\## Declare Enum type
type
WEEKEND {.pure.} = enum
SUNDAY, SATURDAY, FRIDAY
type
WEEKEND1 {.pure.} = enum
SUNDAY, SATURDAY

echo FRIDAY # FRIDAY
echo WEEKEND.SUNDAY # SUNDAY
echo SATURDAY # Error: ambiguous identifier: 'SATURDAY'
``````

## Enum iteration in NIM

NIM provides different ordinal functions.

`low` and `high` and lowest and highest value of an enum `ord` gives the ordinal value of an enum constant.

use the `for in` loop to iterate lowest to highest and print the enum and ordinal value

``````## Declare Enum type
type
WEEKEND {.pure.} = enum
SUNDAY, SATURDAY
for value in ord(low(WEEKEND))..
ord(high(WEEKEND)):
echo WEEKEND(value), " : - : ", value
``````

Output:

``````SUNDAY : - : 0
SATURDAY : - : 1
``````