D語言列舉Enums


列舉用於定義命名常數的值。列舉型別是使用enum關鍵字宣告的。

列舉語法

列舉定義的最簡單的形式是這樣的:

enum enum_name { 
enumeration list
}

那麼,

  • enum_name指定列舉型別名稱。

  • 列舉列表是一個逗號分隔的識別符號列表。

每個列舉列表中的符號代表一個整數值,比它前面的符號一個更大的。預設情況下,第一個列舉符號的值是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("Current Day: %d", day);
   writefln("Friday : %d", Days.fri);
   return 0;
}

當上面的程式碼被編譯並執行,它會產生以下結果:

Current Day: 1
Friday : 5

在上面的程式中,我們可以看到如何列舉都可以使用。最初,我們建立使用者定義的列舉Days,一個命名的變數day。然後,我們將它使用點運算子設定為mon。需要使用writefln方法列印週一的是被儲存的值。您還需要指定型別。在這裡,它的整數型別,所以我們使用%d。

命名列舉的屬性

在上面的例子中使用了名稱為Days列舉,被稱為命名列舉。這些命名列舉具有以下性質

  • init 初始化列舉中的第一個值。

  • min 返回列舉的最小值。

  • max 返回列舉的最大值。

  • size 返回儲存的大小為列舉。

讓我們修改前面的例子來使用屬性。

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 : 3
Max : 9
Size of: 4

匿名列舉

列舉沒有名字叫做匿名列舉。匿名列舉的例子如下。

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

匿名列舉工作幾乎與命名列舉方式一樣,但不具有最大值,最小值和sizeof屬性。

用列舉的基本型別

基礎類別型為列舉的語法如下所示。

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