日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

delphi編碼標(biāo)準(zhǔn)——過程和函數(shù)

 frie 2005-08-09

 過程和函數(shù)

 

1. 命名與格式

(1)過程名應(yīng)當(dāng)以大寫字母開始,且大小寫交錯以增加可讀性。

下面是一個不正確的寫法:

procedure thisisapoorlyformattedroutinename;

改成這樣寫就對了:

procedure ThisIsMuchMoreReadableRoutineName;

(2)過程名應(yīng)當(dāng)有意義。進行一個動作的例程最好在名稱前加上表示動作的動詞為前綴。

例如:

procedure FormatHardDrive;

設(shè)置輸入?yún)?shù)值的例程名應(yīng)當(dāng)以Set為其前綴,

例如:

procedure SetUserName;

獲取數(shù)值的例程名應(yīng)當(dāng)以Get為其前綴,

例如:

function GetUserName: string;

2. 形參

(1) 格式:只要可能,同一類型的形參應(yīng)當(dāng)歸并在一起。

例如:

procedure ProcedureName (Param1, Param2, Param3: Integer; Param4: string);

(2) 命名:所有形參的名稱都應(yīng)當(dāng)表達出它的用途。如果合適的話,形參的名稱最好以字母A為前綴。

例如:

procedure ProcedureName (AUserName: string; AUserAge: integer);

當(dāng)參數(shù)名與類的特性或字段同名時,前綴A就有必要了。

(3) 參數(shù)順序:形參的順序主要要考慮寄存器調(diào)用規(guī)則。最常用的參數(shù)應(yīng)當(dāng)作為第一個參數(shù),按使用頻率依次從左到右排。輸入?yún)?shù)位于輸出參數(shù)之前。范圍大的參數(shù)應(yīng)當(dāng)放在范圍小的參數(shù)之前。

例如:

procedure ProcedureName (APlanet, AContinent, ACountry, AState, ACity).

有些則例外。

例如:

在事件處理過程中,TObject類型的Sender參數(shù)往往是第一個要傳遞的參數(shù)。

(4) 常量參數(shù):要使記錄、數(shù)組、短字符串或接口類型的參數(shù)不能被例程修改,就應(yīng)當(dāng)把形參標(biāo)以Const。這樣,編譯器將以最有效的方式生成代碼,保證傳遞的參數(shù)不可變。

如果其他類型的參數(shù)希望不被例程所修改,也可以標(biāo)上C o n s t。盡管這對效率沒有影響,但這給例程的調(diào)用者帶來了更多的信息。

(5) 命名沖突:當(dāng)兩個單元中含有相同名稱的例程時,如果調(diào)用該例程,實際被調(diào)用的是Uses 子句中較后出現(xiàn)的那個單元中的例程。為避免這種情況,可在方法名前加想要的單元名,

例如:

SysUtils.FindClose (SR);

Windows.FindClose(Handle);

3.變量

(1) 變量的命名與格式:變量的名稱應(yīng)當(dāng)能夠表達出它的用途。

循環(huán)控制變量常常為單個字母,諸如I、JK。也可以使用更有意義的名稱,例如UserIndex

布爾變量名必須能清楚表示出TrueFalse值的意義。

(2) 局部變量:局部變量用于例程內(nèi)部,遵循其他變量的命名規(guī)則。如果需要的話,應(yīng)當(dāng)在例程的入口處立即初始化變量。

局部的AnsiString類型的變量自動被初始化為空字符串;

局部的接口和dispinterface類型的變量自動被初始化為nil;

局部的VariantOleVariant類型的變量自動被初始化為Unassigned。

(3) 全局變量:一般不鼓勵使用全局變量。不過,有時候需要用到。即使如此,也應(yīng)當(dāng)把全局變量限制在需要的環(huán)境中。

全局變量可能只在單元的實現(xiàn)部分是全局的;

全局?jǐn)?shù)據(jù)如果將由許多單元使用,就應(yīng)移動到一個公用單元里被所有對象使用;

全局?jǐn)?shù)據(jù)可在聲明時直接初始化為一個值。

(注意,所有全局變量自動進行零初始化,因此,不要將全局變量初始化為諸如0nil、或Unassigned等空值。零初始化的全局變量在. EXE文件中不占空間。零初始化的數(shù)據(jù)保存在虛擬的數(shù)據(jù)段中,而虛擬數(shù)據(jù)段只在應(yīng)用程序啟動時才分配內(nèi)存。非零初始化的全局?jǐn)?shù)據(jù)則在. E X E文件中占空間。)

4.類型

(1) 大小寫規(guī)則:類型標(biāo)識符是保留字,應(yīng)當(dāng)全部小寫。Win32 API類型常常全部大寫,并且遵循諸如Windows.pas或其他API單元中關(guān)于特定類型名的規(guī)則。對于其他變量名,第一個字母應(yīng)大寫,其他字母則大小寫交錯。

例如:

var

MyString: string;         // 保留字

WindowsHandle: HWND; // Win32 API 類型

I: Integer;              //S y s t e m單元中引入的類型標(biāo)識

(2)浮點型:不鼓勵使用Real類型,因為它只是為了與老的Pascal代碼兼容而保留的。通常情況下,對于浮點數(shù)應(yīng)當(dāng)使用Double。Double可被處理器優(yōu)化,是IEEE定義的標(biāo)準(zhǔn)的數(shù)據(jù)格式。當(dāng)需要比Double提供的范圍更大時,可以使用Extend。ExtendIntel專用的類型,Java不支持。當(dāng)浮點變量的物理字節(jié)數(shù)很重要時(可能使用其他語言編寫DLL ),則應(yīng)當(dāng)使用Single。

(3) 枚舉型:枚舉類型名必須代表枚舉的用途。名稱前要加T字符作為前綴,表示這是個數(shù)據(jù)類型。枚舉類型的標(biāo)識符列表的前綴應(yīng)包含2 ~ 3個小寫字符,來彼此關(guān)聯(lián)。

例如:

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

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

(4)VariantOleVariant

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

5.構(gòu)造類型

(1) 數(shù)組類型:數(shù)組類型名應(yīng)表達出該數(shù)組的用途。類型名必須加字母T為前綴。如果要聲明一個指向數(shù)組類型的指針,則必須加字母P為前綴,且聲明在類型聲明之前。

例如:

type

PCycleArray = ^TCycleArray;

TCycleArray=array [1..100] of integer;

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

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

例如:

type

PStudent = ^ TStudent;

TStudent = record

StudentName: string;

StudentAge: Double;

6.類

(1) 命名與格式

類的名稱應(yīng)當(dāng)表達出類的用途。類名前要加字母T,表示它是一個類型。

例如:

type

TStudent= class (TObject);

類的實例名稱與類名相同,只不過沒有前綴T

var

Student: TStudent;

注意關(guān)于組件的命名,請參閱6.6節(jié)組件。

(2) 字段

命名與格式:字段的命名遵循與變量相同的規(guī)則,只不過要加前綴F,表示這是字段。

可見性:所有字段必須為私有。如果要在類的作用域之外訪問字段,可借助于類的屬性來實現(xiàn)。

(3) 方法

命名與格式:方法的命名遵循與過程和函數(shù)相同的規(guī)則。

靜態(tài)方法:當(dāng)你不希望一個方法被派生類覆蓋時,應(yīng)當(dāng)使用靜態(tài)方法。

虛擬方法與動態(tài)方法:當(dāng)你希望一個方法能被派生類覆蓋,應(yīng)當(dāng)使用虛擬方法。如果類的方法要被多個派生類直接或間接地使用,則應(yīng)當(dāng)用動態(tài)方法。

例如:某一個類含有一個被頻繁覆蓋的方法,并有100個派生類,則應(yīng)將方法定義為動態(tài)的,這樣可以減少內(nèi)存的開銷。

抽象方法:如果一個類要創(chuàng)建實例,則不要使用抽象方法。抽象方法只能在那些從不創(chuàng)建實例的基類中使用。

屬性訪問方法:所有屬性訪問方法應(yīng)當(dāng)定義在類的私有或保護部分。屬性訪問方法遵循與過程和函數(shù)相同的規(guī)則。用于讀的方法應(yīng)當(dāng)加G e t前綴,用于寫的方法應(yīng)當(dāng)加Set前綴,并且有一個叫Value的參數(shù),其類型與屬性的類型相同。

例如:

TStudent = class (TObject)

private

FName: string;

protected

function GetName: string;

procedure SetName (Value: string);

public

property Name: string read GetName write SetName;

end;

(4) 屬性

屬性作為私有字段的訪問器,遵循與字段相同的命名規(guī)則,只不過沒有F前綴。屬性名應(yīng)為名詞,而不是動詞。屬性是數(shù)據(jù),而方法是動作。數(shù)組屬性名應(yīng)當(dāng)是復(fù)數(shù),而一般的屬性應(yīng)當(dāng)是單數(shù)。

(5) 訪問方法的使用

盡管不是必須,但還是建議你使用寫訪問方法來訪問代表私有字段屬性。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多