Учебники

D Программирование — Перечисления

Перечисление используется для определения именованных значений констант. Перечислимый тип объявляется с использованием ключевого слова enum .

Синтаксис перечисления

Простейшая форма определения перечисления следующая —

enum enum_name {  
   enumeration list 
}

Куда,

  • Enum_name указывает имя типа перечисления.

  • Список перечисления представляет собой список идентификаторов через запятую.

Enum_name указывает имя типа перечисления.

Список перечисления представляет собой список идентификаторов через запятую.

Каждый из символов в списке перечисления обозначает целочисленное значение, на один больше, чем символ, который предшествует ему. По умолчанию значение первого символа перечисления равно 0. Например, —

enum Days { sun, mon, tue, wed, thu, fri, sat };

пример

В следующем примере демонстрируется использование переменной enum —

Live Demo

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, которое было сохранено. Вам также необходимо указать тип. Он имеет тип integer, поэтому мы используем% d для печати.

Именованные свойства Enums

Приведенный выше пример использует имя Days для перечисления и называется named enums. Эти именованные перечисления имеют следующие свойства —

  • Init — инициализирует первое значение в перечислении.

  • min — возвращает наименьшее значение перечисления.

  • max — возвращает наибольшее значение перечисления.

  • sizeof — возвращает размер хранилища для перечисления.

Init — инициализирует первое значение в перечислении.

min — возвращает наименьшее значение перечисления.

max — возвращает наибольшее значение перечисления.

sizeof — возвращает размер хранилища для перечисления.

Давайте изменим предыдущий пример, чтобы использовать свойства.

Live Demo

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

Перечисление без имени называется анонимным перечислением. Пример анонимного перечисления приведен ниже.

Live Demo

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 :baseType {  
   enumeration list 
}

Некоторые из базовых типов включают long, int и string. Пример использования long показан ниже.

Live Demo

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 обеспечивает такие функции, как инициализация нескольких значений в перечислении с несколькими типами. Пример показан ниже.

Live Demo

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; 
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —