天天看點

Object Pascal精要

1. 濫用delphi的專屬類型(比如子界類型),雖然提高了可讀性,但降低了跨語言可移植性,以及可擴充性。一般情況下,使用常用的資料類型即可。不要過分追求資料與其含義的一體化。可采用多語言的最小集合原則。

2. 集合運算是一個有用的亮點

3. 數組要跟C語言看齊,下标盡可能從0開始。周遊數組,保險起見盡可能通過Low/High函數擷取數組邊界。

   var

      List: array [1..10] of Integer; X, I: Integer;

   begin

      // initialize the array

      for I := Low (List) to High (List)  do

         List [I] := I * 2;

      // call X := Sum (List);

4. 常量定義有2種方法

   const

       VAL = 100;

   不需要聲明類型,會自動比對相關類型,并配置設定記憶體。且可移植性好一些。推薦!

   const

      VAL :Integer = 100;

   每次使用時都要複制常量值。

5. 資源串常量,一種特殊的字元串常量,儲存到程式資源的字元串表中

   resourcestring

       VAL = ‘abcd';

6. 全局變量允許初始化值

   var

      V : Integer =100;

7. 字元串類型

   string的具體類型要根據編譯開關$H決定

    $H+意味着是AnsiString,類似于C的0結尾字元串,長度理論上可以無限長

    WideString跟AnsiString相似,隻是以unicode碼為機關

   古老的ShortString最大長度是255

   AnsiString轉C字元串,用PChar(..),需要注意的是轉了之後,delphi代碼不能再對AnsiString變量做改動了,除非再一次轉回AnsiString -- AnsiString(PChar(..))

8. 指針

    用脫字元表示

   type

     P = ^ Integer;

   var

     T : Integer;

   P = @T;

10. Record類型在大多數語言裡都能找到相應的實作

11. 在一些遞歸的場合,2個函數互相調用時,可以在一個函數的聲明後面加關鍵字 forward; 其實作可在其他地方出現(不限于本單元)。

12. 盡量不用with語句,其降低了代碼可讀性。

13. 循環語句,盡量用一種,傾向while

14. case語句隻針對有序類型。每個case分支或if分支用begin..end包裹。

15. windows函數

      stdcall是Windows标準的調用方式,dll調用需遵從此調用方式。

      調用外部dll函數,依據的是dll以及函數名稱

      function LineTo; external'gdi32.dll'name'LineTo';

16.過程類型

     pascal的過程類型與c的函數指針很形似,如果是函數加個傳回值

     type

          IntProc = procedure (var Num: Integer);

17. 重載

      需要重載的過程/函數的聲明以及實作部分都要加上overload

18.uses部分前面子產品的函數會被後面子產品的同名函數覆寫掉。一種避免重名的方式是在函數名前加上子產品名字首。