D語言遊戲編程(2):D語言基礎之Declarations,Types,Properties

  首先需要熟悉一下D語言。D語言目前還沒有什麼書(有一本日文的,不知道小日本怎的對D這麼熱衷),所能參考的就是D語言的官方文檔啦。不太適合編程的初學者,對於有一定變成經驗的人來說,倒是挺合適的。英文原文從DMD官方網站可以找到:http://www.digitalmars.com/d/ ;中文翻譯:http://blog.csdn.net/uframer/

 下面的源碼就是針對D語言文檔中的沒一節中的要點編寫的,這是前面三節Declarations,Types,Properties中的主要概念,着重與C/C++不同的地方,並且加入了詳細的中文註釋。把下面的代碼拷貝到一個文本文件中,主要,要存成unicode編碼格式才能編譯通過。

import std.stdio; // 引入D語言的標準io庫, 它是"dmdlibphobos.lib"的一部分; 庫文件的查找由sc.ini中的LIB環境變量指定.

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


 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章