程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> delphi代碼標准文檔(2)

delphi代碼標准文檔(2)

編輯:Delphi

 

5). 類型
(1). 大小寫規則
 類型標識符是保留字,應當全部小寫。Win32 API 類型常常全部大寫,並且遵循諸如Windows.pas或其他API單元中關於特定類型名的規則。對於其他變量名,第一個字母應大寫,其他字母則大小寫交錯。下面是一些例子:

var
 MyString: string; // 保留字
 WindowsHandle: HWND; // Win32 API 類型
 I: Integer; //在System單元中引入的類型標識

(2). 浮點型
 不鼓勵使用Real類型,因為它只是為了與老的Pascal代碼兼容而保留的。通常情況下,對於浮點數應當使用Double。Double可被處理器優化,是IEEE定義的標准的數據格式。當需要比Double提供的范圍更大時,可以使用Extend。Extend是intel專用的類型,Java不支持。當浮點變量的物理字節數很重要時(可能使用其他語言編寫DLL),則應當使用Single。

(3).Variant和OleVariant
 一般不建議使用Variant和OleVariant。但是,當數據類型只有在運行期才知道時(常常是在COM和數據庫應用的程序中),這兩個類型對編程就有必要。當進行諸如自動化ActiveX控件的COM編程時,應當使用OleVariant;而對於非COM編程,則應當使用Variant。這是因為,Variant能夠有效地保存Delphi的原生字符串,而OleVariant則將所有字符串轉換為OLE字符串(即WideChar字符串),且沒有引用計數功能。

6). 語句
(1). If 語句
 在if/then/else語句中,最有可能執行的情況應放在then子句中,不太可能的情況放在else子句中。為了避免出現許多if語句,可以使用case語句代替。如果多於5級,不要使用if語句。請改用更清楚的方法。不要在if語句中使用多余的括號。

 如果在if語句中有多個條件要測試,應按照計算的復雜程度從右向左排。這樣,可以使代碼充分利用編譯器的短路估算邏輯。例如,如果Condition1比Condition2快,Condition2比Condition3快,則if語句一般應這樣構造:

if Condition1 and Condition2 and Condition3 then

 如果Condition3為False的機會很大,利用短路估算邏輯,我們也可以將Condition3放在最前面:

if Condition3 and Condition1 and Condition2 then

(2). case 語句
(1) 概述
 case語句中每種情況的常量應當按數字或字母的順序排列。每種情況的動作語句應當簡短且通常不超過4 - 5 行代碼。如果動作太復雜,應將代碼單獨放在一個過程或函數中。Case語句的else子句只用於默認情況或錯誤檢測。

(2) 格式
 case語句遵循一般的縮進和命名規則。

(3). while 語句
 建議不要使用Exit過程來退出while循環。如果需要的話,應當使用循環條件退出循環。所有對while循環進行初始化的代碼應當位於while入口前,且不要被無關的語句隔開。任何業務的輔助工作都應在循環後立即進行。

(4). for 語句
 如果循環次數是確定的,應當用for語句代替while語句。

(5). repeat 語句
 repeat語句類似於while循環,且遵循同樣的規則。

(6). with 語句
(1) 概述
 with語句應小心使用。要避免過度使用with語句,尤其是在with語句中使用多個對象或記錄。例如:

with Record1,Record2 do

 這些情況很容易迷惑編程人員,且導致調試困難。

(2) 格式
 with語句也遵循本章關於命名和縮進的規則。

7). 結構化異常處理
(1). 概述
 異常處理主要用於糾正錯誤和保護資源。這意味著,凡是分配資源的地方,都必須使用try...finally來保證資源得到釋放。不過,如果是在單元的初始/結束部分或者對象的構造器/析構器中來分配/釋放資源則例外。

(2). try...finally的用法
 在可能的情況下,每個資源分配應當與try...finally結構匹配,例如,下面代碼可能導致錯誤:

SomeClass1 := TSomeClass.Create;
SomeClass2 := TSomeClass.Create;
try
 { do some code }
finally
 SomeClass1.Free;
 SomeClass2.Free;
end;

 上述資源分配的一個安全方案是:

SomeClass1 := TSomeClass.Create;
try
 SomeClass2 := TSomeClass.Create;
 try
   { do some code }
 finally
   SomeClass2.Free;
 end;
finally
 SomeClass1.Free;
end;

(3). try...except的用法
 如果你希望在發生異常時執行一些任務,可以使用try...except。通常,沒有必要為了簡單地顯示一個錯誤信息而使用try...except,因為Application對象能夠自動根據上下文做到這一點。如果要在子句中激活默認的異常處理,可以再次觸發異常。

(4). try...except...else的用法
 不鼓勵使用帶else子句的try...except,因為這將阻塞所有的異常,包括你沒有准備處理的異常。

3.命名規范
3.1.過程(Procedure)與函數(Function)
1).命名
 過程與函數名應當有意義。進行一個動作的過程最好在名稱前加上表示動作的動詞為前綴。例如:

procedure FormatHardDrive;

 設置輸入參數值的過程名應當以Set 為其前綴,例如:

procedure SetUserName;

 獲取數值的過程名應當以Get 為其前綴,例如:

function GetUserName:string;

2).形參
 所有形參的名稱都應當表達出它的用途。如果合適的話,形參的名稱最好以字母a 為前綴,例如:

procedure SomeProc(aUserName:string; aUserAge:integer);

 當參數名與類的特性或字段同名時,前綴a 就有必要了。

3).命名沖突
 當兩個單元中含有相同名稱的過程時,如果調用該過程,實際被調用的是Uses 子句中較後出現的那個單元中的過程。為避免這種情況,可在方法名前加想要的單元名,例如:

SysUtils.FindClose(SR);

或Windows.FindClose(Handle);

3.2.變量(Variable)
 變量的名稱應當能夠表達出它的用途。循環控制變量常常為單個字母,諸如I 、J 或K 。也可以使用更有意義的名稱,例如UserIndex。布爾變量名必須能清楚表示出True 和False 值的意義。

1). 局部變量
 局部變量遵循其他變量的命名規則。

2). 全局變量
 全局變量以大寫字母“G”打頭,並遵循其他變量的命名規則。

3.3.類型(Type)
3.3.1.一般類型
1). 枚舉型
 枚舉類型名必須代表枚舉的用途。名稱前要加T字符作為前綴,表示這是個數據類型。枚舉類型的標識符列表的前綴應包含2 - 3 個小寫字符,來彼此關聯。例如:

TSongType=(stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB);

 枚舉類型的變量實例的名稱與類型相同,但沒有前綴T ,也可以給變量一個更加特殊名稱,諸如:FavoriteSongTypel、FavoriteSongType2等等。

3.3.2.構造類型
1). 數組類型
 數組類型名應表達出該數組的用途。類型名必須加字母“T”為前綴。如果要聲明一個指向數組類型的指針,則必須加字母P 為前綴,且聲明在類型聲明之前。例如:

type
 PCycleArray = ^TCycleArray;
 TCycleArray=array[1..100] of integer;

實際上,數組類型的變量實例與類型名稱相同,但沒有“T”前綴。

2). 記錄類型
 記錄類型名應表達出記錄的用途。類型名必須加字母T為前綴。如果要聲明一個指向記錄類型的指計,則必須加字母P為前綴,且其聲明在類型聲明之前。例如:

type
 PEmployee = ^TEmployee;
 TEmployee = record
   EmployeeName: string;
   EmployeeRate: Double;
 end;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved