D語言別名


別名,正如它的名字是指為現有名稱的替代名稱。別名的語法如下所示。

alias new_name = existing_name;
以下是較舊的語法,以防萬一指定一些較舊的格式的例子。不推薦使用。
alias existing_name new_name;

還有用於與表達,它是下面給出中,我們可以直接使用,而不是表達的別名另一種語法。

alias expression alias_name ;

可能了解,typedef增加了建立新型別的能力。別名可以作為一個typedef類似的工作,甚至更多。一個簡單的例子,使用別名,如下圖所示,使用std.conv頭,它提供了型別轉換的能力。

import std.stdio;
import std.conv:to;

alias  to!(string) toString;

void main()
{
   int a = 10;

   string s = "Test"~toString(a);
   writeln(s);
}

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

Test10

在上面的例子,而不是使用!string(a),我們已經分配給它的別名的toString使其更方便和更容易理解,我們。

元組別名

讓我們來看看另一個例子,我們可以為一個元組設定別名。

import std.stdio;
import std.typetuple;

alias TypeTuple!(int, long) TL;

void method1(TL tl)
{
   writeln(tl[0],"	", tl[1] );
}

void main()
{
   method1(5, 6L);   
}

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

5	6

在上面的範例中,型別的元組被分配給變數的別名,它簡化了的方法的定義和變數的存取。當我們嘗試重用這種型別的元組的這種存取是更加有用。

別名資料型別

很多時候,我們可以定義一個需要在整個應用程式中使用通用資料型別。當多個程式員編寫一個應用程式,它可以是情況下,一個人使用整型,另一雙等。為了避免這種衝突,我們經常使用型別的資料型別。一個簡單的例子如下所示。

import std.stdio;

alias int myAppNumber;
alias string myAppString;

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

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

10TestString

類變數別名

如果不熟悉的類和繼承的概念,看看關於classesand繼承教學開始本節之前。往往有規定,我們需要存取的子類父類別的成員變數,這可以成為可能的別名,可能以不同的名稱。一個簡單的例子如下所示。

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

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

10TestString

this別名

這個別名提供了使用者自定義型別的自動型別轉換的能力。其語法如下所示,其中的關鍵字的別名,這都寫在成員變數或者成員函式的兩側。

alias member_variable_or_member_function this;

一個例子如下所示,顯示此別名的能力。

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

在上面的例子中,可以看到,結構矩形轉換為double值,在別名的幫助下這個方法。此程式碼被編譯並執行,它會產生結果如下:

30