Перечисления


Предыдущая страница
Следующая страница  

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

Синтаксис enum

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

enum имя_перечисления {  
   список_перечисления 
}

Где,

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

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

Пример

Следующий пример демонстрирует использование переменной-перечисления:

import std.stdio;

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

int main(string[] args) {
   Days day;

   day = Days.mon;
   writefln("Сегодня: %d", day); 
   writefln("Пятница: %d", Days.fri); 
   return 0;
}

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

Сегодня: 1 
Пятница: 5

В приведенной выше программе мы видим, как можно использовать перечисление. Изначально мы создаём переменную с именем day с типом Days – нашего объявленного перечисления. Затем мы устанавливаем его в mon, используя нотацию с оператором точки. Нам нужно использовать метод writefln для вывода значения mon, которое было сохранено. Вам также нужно указать тип. Он имеет тип integer, поэтому мы используем %d для печати.

Свойства именованных перечислений

В приведенном выше примере для перечисления используется имя Days и такие типы называются именованными перечислениями (named enums). Эти именованные перечисления обладают следующими свойствами:

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

import std.stdio;

// Инициализируем sun значением 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

Анонимное перечисление

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

import std.stdio; 
 

enum { sun , mon, tue, wed, thu, fri, sat }; 
 
int main(string[] args) { 
   writefln("Воскресенье : %d", sun); 
   writefln("Понедельник : %d", mon); 
   return 0; 
}

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

Воскресенье : 0
Понедельник : 1

Анонимные перечисления работают почти так же, как и именованные, но у них нет свойств max, min и sizeof.

Синтаксис перечисления с базовым типом

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

enum :базовыйТип {  
   список_перечисления 
}

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

import std.stdio;
  
enum : string { 
   A = "привет", 
   B = "мир", 
} 
  
int main(string[] args) { 
   writefln("A : %s", A); 
   writefln("B : %s", B); 
   
   return 0; 
}

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

A : привет
B : мир

Больше возможностей

Перечисление в D предоставляет такие возможности, как инициализация нескольких значений в перечислении различными типами. Пример показан ниже.

import std.stdio;
  
enum { 
   A = 1.2f,  // A – это 1.2f типа float 
   B,         // B – это 2.2f типа float 
   int C = 3, // C – это 3 типа int 
   D          // D – это 4 типа 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

От переводчика:
Почему-то авторы не написали про чаще всего используемый вариант, объявление констант. Так что напишу от себя.

Если у анонимных перечислений все элементы явно инициализуются каким-либо значением, то фигурные скобки можно опустить. Таким образом использование ключевого слова enum становится объявлением констант, значение которых вычисляется во время компиляции:

import std.stdio;
  
enum  
   A = 1.2f,      // A – это 1.2f типа float 
   B = 6.7,       // B – это 6.7 типа double 
   C = 3,         // C – это 3 типа int 
   D = "привет";  // D – это "привет" типа string 

  
int main(string[] args) { 
   writefln("A : %f", A); 
   writefln("B : %f", B); 
   writefln("C : %d", C); 
   writefln("D : %s", D);  
   return 0; 
}

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

A : 1.200000
B : 6.700000
C : 3
D : привет

Предыдущая страница
Следующая страница