Программирование на языке D - перечисления
Перечисление используется для определения именованных значений констант. Перечислимый тип объявляется с помощьюenum ключевое слово.
Перечисление Синтаксис
Самая простая форма определения перечисления следующая:
enum enum_name {
enumeration list
}
Где,
Enum_name задает имя типа перечисления.
Список перечисления представляет собой список идентификаторов, разделенных запятыми.
Каждый из символов в списке перечисления обозначает целочисленное значение, на единицу большее, чем предшествующий ему символ. По умолчанию значение первого символа перечисления равно 0. Например -
enum Days { sun, mon, tue, wed, thu, fri, sat };
пример
В следующем примере демонстрируется использование переменной enum -
import std.stdio;
enum Days { sun, mon, tue, wed, thu, fri, sat };
int main(string[] args) {
Days day;
day = Days.mon;
writefln("Current Day: %d", day);
writefln("Friday : %d", Days.fri);
return 0;
}
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
Current Day: 1
Friday : 5
В приведенной выше программе мы видим, как можно использовать перечисление. Сначала мы создаем переменную с именем day из нашего пользовательского перечисления Days. Затем мы устанавливаем его на mon с помощью оператора точки. Нам нужно использовать метод writefln, чтобы распечатать сохраненное значение mon. Также необходимо указать тип. Это целое число, поэтому для печати мы используем% d.
Свойства именованных перечислений
В приведенном выше примере для перечисления используется имя Days, которое называется именованными перечислениями. Эти именованные перечисления имеют следующие свойства:
Init - Инициализирует первое значение в перечислении.
min - Возвращает наименьшее значение перечисления.
max - Возвращает наибольшее значение перечисления.
sizeof - Возвращает размер хранилища для перечисления.
Давайте изменим предыдущий пример, чтобы использовать свойства.
import std.stdio;
// Initialized sun with value 1
enum Days { sun = 1, mon, tue, wed, thu, fri, sat };
int main(string[] args) {
writefln("Min : %d", Days.min);
writefln("Max : %d", Days.max);
writefln("Size of: %d", Days.sizeof);
return 0;
}
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
Min : 1
Max : 7
Size of: 4
Анонимный Enum
Перечисление без имени называется анонимным перечислением. Пример дляanonymous enum приведен ниже.
import std.stdio;
// Initialized sun with value 1
enum { sun , mon, tue, wed, thu, fri, sat };
int main(string[] args) {
writefln("Sunday : %d", sun);
writefln("Monday : %d", mon);
return 0;
}
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
Sunday : 0
Monday : 1
Анонимные перечисления работают почти так же, как именованные перечисления, но у них нет свойств max, min и sizeof.
Enum с синтаксисом базового типа
Синтаксис для перечисления с базовым типом показан ниже.
enum :baseType {
enumeration list
}
Некоторые из базовых типов включают long, int и string. Пример использования long показан ниже.
import std.stdio;
enum : string {
A = "hello",
B = "world",
}
int main(string[] args) {
writefln("A : %s", A);
writefln("B : %s", B);
return 0;
}
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
A : hello
B : world
Больше возможностей
Перечисление в D обеспечивает такие функции, как инициализация нескольких значений в перечислении с несколькими типами. Пример показан ниже.
import std.stdio;
enum {
A = 1.2f, // A is 1.2f of type float
B, // B is 2.2f of type float
int C = 3, // C is 3 of type int
D // D is 4 of type int
}
int main(string[] args) {
writefln("A : %f", A);
writefln("B : %f", B);
writefln("C : %d", C);
writefln("D : %d", D);
return 0;
}
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
A : 1.200000
B : 2.200000
C : 3
D : 4