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部分前面子產品的函數會被後面子產品的同名函數覆寫掉。一種避免重名的方式是在函數名前加上子產品名字首。