Programação D - Enums

Uma enumeração é usada para definir valores constantes nomeados. Um tipo enumerado é declarado usando oenum palavra-chave.

A sintaxe enum

A forma mais simples de definição de enum é a seguinte -

enum enum_name {  
   enumeration list 
}

Onde,

  • O enum_name especifica o nome do tipo de enumeração.

  • A lista de enumeração é uma lista separada por vírgulas de identificadores.

Cada um dos símbolos na lista de enumeração representa um valor inteiro, um maior do que o símbolo que o precede. Por padrão, o valor do primeiro símbolo de enumeração é 0. Por exemplo -

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

Exemplo

O exemplo a seguir demonstra o uso da variável 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;
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Current Day: 1 
Friday : 5

No programa acima, podemos ver como uma enumeração pode ser usada. Inicialmente, criamos uma variável chamada dia de nossa enumeração definida pelo usuário Dias. Em seguida, definimos como mon usando o operador ponto. Precisamos usar o método writefln para imprimir o valor de mon que foi armazenado. Você também precisa especificar o tipo. É do tipo inteiro, portanto, usamos% d para impressão.

Propriedades de Enums Nomeados

O exemplo acima usa um nome Dias para a enumeração e é chamado de enums nomeados. Esses enums nomeados têm as seguintes propriedades -

  • Init - Inicializa o primeiro valor na enumeração.

  • min - Retorna o menor valor de enumeração.

  • max - Retorna o maior valor de enumeração.

  • sizeof - Retorna o tamanho do armazenamento para enumeração.

Vamos modificar o exemplo anterior para fazer uso das propriedades.

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

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Min : 1
Max : 7
Size of: 4

Enum anônimo

A enumeração sem nome é chamada de enum anônimo. Um exemplo paraanonymous enum é fornecido abaixo.

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

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Sunday : 0
Monday : 1

Enums anônimos funcionam da mesma forma que enums nomeados, mas não têm as propriedades max, min e sizeof.

Enum com sintaxe de tipo de base

A sintaxe para enumeração com tipo base é mostrada abaixo.

enum :baseType {  
   enumeration list 
}

Alguns dos tipos básicos incluem long, int e string. Um exemplo usando long é mostrado abaixo.

import std.stdio;
  
enum : string { 
   A = "hello", 
   B = "world", 
} 
  
int main(string[] args) { 
   writefln("A : %s", A); 
   writefln("B : %s", B); 
   
   return 0; 
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

A : hello
B : world

Mais recursos

A enumeração em D fornece recursos como inicialização de vários valores em uma enumeração com vários tipos. Um exemplo é mostrado abaixo.

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

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

A : 1.200000
B : 2.200000
C : 3
D : 4