Lập trình D - Bí danh

Bí danh, như tên đề cập cung cấp một tên thay thế cho các tên hiện có. Cú pháp cho bí danh được hiển thị bên dưới.

alias new_name = existing_name;

Sau đây là cú pháp cũ hơn, đề phòng trường hợp bạn tham khảo một số ví dụ định dạng cũ hơn. Nó không được khuyến khích sử dụng cái này.

alias existing_name new_name;

Ngoài ra còn có một cú pháp khác được sử dụng với biểu thức và nó được đưa ra bên dưới, trong đó chúng ta có thể sử dụng trực tiếp tên bí danh thay vì biểu thức.

alias expression alias_name ;

Như bạn có thể biết, một typedef bổ sung khả năng tạo các kiểu mới. Bí danh có thể thực hiện công việc của một typedef và thậm chí hơn thế nữa. Dưới đây là một ví dụ đơn giản để sử dụng bí danh sử dụng tiêu đề std.conv cung cấp khả năng chuyển đổi kiểu.

import std.stdio; 
import std.conv:to; 
 
alias to!(string) toString;  

void main() { 
   int a = 10;  
   string s = "Test"~toString(a); 
   writeln(s); 
}

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

Test10

Trong ví dụ trên thay vì sử dụng to! String (a), chúng tôi đã gán nó cho tên bí danh toString để thuận tiện hơn và dễ hiểu hơn.

Bí danh cho Tuple

Hãy để chúng tôi xem xét một ví dụ khác, nơi chúng tôi có thể đặt tên bí danh cho Tuple.

import std.stdio; 
import std.typetuple; 
 
alias TypeTuple!(int, long) TL; 
 
void method1(TL tl) { 
   writeln(tl[0],"\t", tl[1] ); 
} 
 
void main() { 
   method1(5, 6L);    
}

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

5	6

Trong ví dụ trên, kiểu tuple được gán cho biến bí danh và nó đơn giản hóa định nghĩa phương thức và quyền truy cập của các biến. Loại truy cập này thậm chí còn hữu ích hơn khi chúng tôi cố gắng sử dụng lại các bộ giá trị kiểu như vậy.

Bí danh cho các loại dữ liệu

Nhiều khi, chúng tôi có thể xác định các kiểu dữ liệu chung cần được sử dụng trên toàn ứng dụng. Khi nhiều lập trình viên mã hóa một ứng dụng, có thể xảy ra trường hợp một người sử dụng int, một người khác sử dụng double, v.v. Để tránh xung đột như vậy, chúng tôi thường sử dụng các kiểu cho các kiểu dữ liệu. Một ví dụ đơn giản được hiển thị bên dưới.

Thí dụ

import std.stdio;
  
alias int myAppNumber; 
alias string myAppString;  

void main() { 
   myAppNumber i = 10; 
   myAppString s = "TestString"; 
   
   writeln(i,s);   
}

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

10TestString

Bí danh cho các biến lớp

Thường có một yêu cầu mà chúng ta cần truy cập vào các biến thành viên của lớp cha trong lớp con, điều này có thể thực hiện được với bí danh, có thể dưới một tên khác.

Trong trường hợp bạn chưa quen với khái niệm lớp và kế thừa, hãy xem hướng dẫn về lớp và kế thừa trước khi bắt đầu với phần này.

Thí dụ

Một ví dụ đơn giản được hiển thị bên dưới.

import std.stdio; 
 
class Shape { 
   int area; 
}
  
class Square : Shape { 
   string name() const @property { 
      return "Square"; 
   } 
   alias Shape.area squareArea; 
}
   
void main() { 
   auto square = new Square;  
   square.squareArea = 42;  
   writeln(square.name); 
   writeln(square.squareArea); 
}

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

Square 
42

Bí danh này

Bí danh này cung cấp khả năng chuyển đổi kiểu tự động của các kiểu do người dùng xác định. Cú pháp được hiển thị bên dưới nơi các từ khóa bí danh và bí danh này được viết ở hai bên của biến thành viên hoặc hàm thành viên.

alias member_variable_or_member_function this;

Thí dụ

Một ví dụ được hiển thị bên dưới để cho thấy sức mạnh của bí danh này.

import std.stdio;
  
struct Rectangle { 
   long length; 
   long breadth;  
   
   double value() const @property { 
      return cast(double) length * breadth; 
   }
   alias value this; 
} 
double volume(double rectangle, double height) {
   return rectangle * height; 
}
  
void main() { 
   auto rectangle = Rectangle(2, 3);  
   writeln(volume(rectangle, 5)); 
}

Trong ví dụ trên, bạn có thể thấy rằng hình chữ nhật struct được chuyển đổi thành giá trị kép với sự trợ giúp của phương thức này là bí danh.

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

30