Программирование на языке 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