Lập trình D - Enums

Một kiểu liệt kê được sử dụng để xác định các giá trị hằng số được đặt tên. Một kiểu liệt kê được khai báo bằng cách sử dụngenum từ khóa.

Các enum Cú pháp

Dạng đơn giản nhất của định nghĩa enum như sau:

enum enum_name {  
   enumeration list 
}

Ở đâu,

  • Các enum_name chỉ định tên kiểu enumeration.

  • Các danh sách liệt kê một danh sách bằng dấu phẩy của định danh.

Mỗi ký hiệu trong danh sách liệt kê là viết tắt của một giá trị số nguyên, một giá trị lớn hơn ký hiệu đứng trước nó. Theo mặc định, giá trị của ký hiệu liệt kê đầu tiên là 0. Ví dụ:

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

Thí dụ

Ví dụ sau minh họa việc sử dụng biến 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;
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Current Day: 1 
Friday : 5

Trong chương trình trên, chúng ta có thể thấy cách liệt kê có thể được sử dụng. Ban đầu, chúng tôi tạo một biến có tên là Ngày trong số Ngày liệt kê do người dùng của chúng tôi xác định. Sau đó, chúng tôi đặt nó thành mon bằng cách sử dụng toán tử dấu chấm. Chúng ta cần sử dụng phương thức writefln để in giá trị của mon được lưu trữ. Bạn cũng cần chỉ định loại. Nó thuộc loại số nguyên, do đó chúng tôi sử dụng% d để in.

Thuộc tính Enums được đặt tên

Ví dụ trên sử dụng tên Days cho kiểu liệt kê và được gọi là tên enums. Các enum được đặt tên này có các thuộc tính sau:

  • Init - Nó khởi tạo giá trị đầu tiên trong bảng liệt kê.

  • min - Nó trả về giá trị nhỏ nhất của kiểu liệt kê.

  • max - Nó trả về giá trị lớn nhất của kiểu liệt kê.

  • sizeof - Nó trả về kích thước lưu trữ để liệt kê.

Hãy để chúng tôi sửa đổi ví dụ trước để sử dụng các thuộc tính.

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

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Min : 1
Max : 7
Size of: 4

Enum ẩn danh

Liệt kê không có tên được gọi là enum vô danh. Một ví dụ choanonymous enum được đưa ra dưới đây.

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

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Sunday : 0
Monday : 1

Các enums ẩn danh hoạt động khá giống với các enums được đặt tên nhưng chúng không có các thuộc tính max, min và sizeof.

Enum với Cú pháp kiểu cơ sở

Cú pháp để liệt kê với kiểu cơ sở được hiển thị bên dưới.

enum :baseType {  
   enumeration list 
}

Một số kiểu cơ sở bao gồm long, int và string. Dưới đây là một ví dụ sử dụng long.

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

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

A : hello
B : world

Các tính năng khác

Liệt kê trong D cung cấp các tính năng như khởi tạo nhiều giá trị trong một kiểu liệt kê với nhiều kiểu. Một ví dụ đã được biểu diễn ở dưới.

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

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

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