下面的源碼就是針對D語言文檔中的沒一節中的要點編寫的,這是前面三節Declarations,Types,Properties中的主要概念,着重與C/C++不同的地方,並且加入了詳細的中文註釋。把下面的代碼拷貝到一個文本文件中,主要,要存成unicode編碼格式才能編譯通過。
void main()
{
try
{
tryDeclarations();
tryTypes();
tryProperties();
}
catch(Exception e)
{
writefln("There is an error:");
}
}
//參考"dmdhtmlddeclaration.html"
void tryDeclarations()
{
// D語言中的變量在會初始化爲默認值
int myInt;
uint myUint;
float myFloat;
writefln("default of int = ",myInt,
", default of uint = ", myUint,
", default of float = ", myFloat);
// 聲明是從右向左讀的
writef("This is an array : ");
int[4] myArray;
foreach(int i,int e;myArray)//如果下標越界,則會拋出一個Exception
writef(i, " = ", e,", ");
writefln();
//auto關鍵字
auto myAuto = 99;
writefln("this is an auto var, sizeof = ", myAuto.sizeof,
", value = ", myAuto);
typedef int MYINT; //typedef是強類型的
alias int MYINITA; //alias對於類型系統則與原來的類型相同
}
//參考"dmdhtmld ype.html"
void tryTypes()
{
//enum可以指定數據類型
enum ETest : ubyte
{
ET_One, ET_Two
}
//使用cast關鍵字進行顯示類型轉換
int a = -1;
uint b = cast(uint)a;
writefln("b = ", b);
//function關鍵字用來聲明函數指針
void function(/*參數列表*/) myFunctionPtr;
myFunctionPtr = &tryDeclarations;//指向一個函數
writefln("myFunctionPtr = ", myFunctionPtr);
//delegate可以指向類的成員函數
}
//參考dmdhtmldproperty.html
void tryProperties()
{
//每種type都有相同的一些property
writefln("float.sizeof = ", float.sizeof,
", byte.init = ",byte.init,
", int.max = ", int.max,
", uint.max = ",uint.max);
//class和struct可以有property成員
struct Foo
{
int data() { return m_data; } // read property
int data(int value) { return m_data = value; } // write property
private:
int m_data;
}
Foo f;
f.data = 3; // same as f.data(3);
f.data = f.data + 3; // same as f.data() + 3;
writefln("f.data = ",f.data);
}