版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 Delphi 程序員代碼編寫標(biāo)準(zhǔn)指南 版權(quán)所有 1998 Xavier Perched和 Steve Teiseira一、序言3二、通用源代碼格式規(guī)則42.1 縮格42.2 頁(yè)邊空格42.3 Begin.End 配對(duì)4三、Object Pascal53.1 括號(hào)53.3 過(guò)程和函數(shù)(例程)6命名/格式化6形式參數(shù)6格式化6參數(shù)的排序7常量參數(shù)7名稱的沖突73.4 變量8變量的命名和格式8局部變量8全局變量的使用83.5 類型9大寫約定9浮點(diǎn)指針類型9枚舉類型9變數(shù)和ole變數(shù)類型10結(jié)構(gòu)類型10數(shù)組類型10記錄類型103.6 語(yǔ)句11語(yǔ)句11語(yǔ)句11一般性話題11格式12語(yǔ)句12語(yǔ)句12語(yǔ)句
2、12語(yǔ)句12一般話題12格式133.7 結(jié)構(gòu)異常處理13一般話題13的使用13的使用14的使用143.8 類類型14命名和格式14域15命名/格式15可視化15方法15命名/格式15使用靜態(tài)的方法15使用虛擬/動(dòng)態(tài)的方法15使用抽象的方法16屬性存取方法16屬性16命名/格式16使用存取的方法17四、文件174.1 工程文件17命名174.2 窗體文件17命名174.3 數(shù)據(jù)模板文件17命名184.4 遠(yuǎn)端數(shù)據(jù)模板文件18命名184.5 Unit文件18通用Unit結(jié)構(gòu)18的名字18子句18部分19部分19部分19部分19窗體單元19命名19數(shù)據(jù)模板單元20命名20一般目的單元20命名20構(gòu)件
3、單元20命名204.6 文件頭21五、窗體和數(shù)據(jù)模板215.1 窗體21窗體類型命名標(biāo)準(zhǔn)21窗體實(shí)例命名標(biāo)準(zhǔn)21自動(dòng)創(chuàng)建窗體22模式窗體實(shí)例化函數(shù)225.2 數(shù)據(jù)模板23數(shù)據(jù)模板命名標(biāo)準(zhǔn)23數(shù)據(jù)模板實(shí)例命名標(biāo)準(zhǔn)23六、包246.1 使用運(yùn)行包和設(shè)計(jì)包的比較246.2 文件命名標(biāo)準(zhǔn)24七、構(gòu)件257.1 用戶自定義構(gòu)件257.2 構(gòu)件單元257.3 使用注冊(cè)單元257.4 構(gòu)件實(shí)例命名約定257.5 構(gòu)件的前綴267.6 Standard頁(yè)267.7 Additional頁(yè)267.8 Win32頁(yè)277.9 System頁(yè)277.10 Internet頁(yè)287.11 Data Access頁(yè)28
4、7.13 Decision Cube頁(yè)297.14 QReport頁(yè)297.15 Dialogs頁(yè)307.16 Win3.1頁(yè)307.17 Samples頁(yè)307.18 ActiveX頁(yè)317.19 Midas頁(yè)31一、序言本文檔詳述了在Delphi 4開(kāi)發(fā)者指南下進(jìn)行編程的代碼編寫標(biāo)準(zhǔn)。在通常情況下,本文檔遵循“取消”式格式的指引方針,該方針由Borland國(guó)際通過(guò)一些例外來(lái)使用。在Delphi 4開(kāi)發(fā)者指南中包含本文檔的目的在于闡述一種方法,通過(guò)該方法,開(kāi)發(fā)小組可以在他們所編寫的代碼中保持一貫的風(fēng)格。這樣做的目的是使在開(kāi)發(fā)小組中的每一個(gè)程序員都可以明白其他程序員的代碼。這有助于提高代碼編寫
5、的可讀性和使用的一貫性。二、通用源代碼格式規(guī)則2.1 縮格縮格是指在每一級(jí)有兩個(gè)空格。不要在源代碼中保留tab字符,這是因?yàn)閠ab字符會(huì)隨著不同用戶的不同設(shè)置和不同的資源管理工具(打印、文檔、版本控制等)而代表不同的寬度。你可以通過(guò)關(guān)閉Environment選項(xiàng)對(duì)話框中Editor頁(yè)上的“Use tab character”和“Optimal fill”檢查框(通過(guò)Tools|Environment)來(lái)禁止保存tab字符。2.2 頁(yè)邊空格頁(yè)邊空格會(huì)被設(shè)置成80字符寬。通常,源碼不會(huì)超出這個(gè)邊界,但這個(gè)方針會(huì)有一些彈性。不管是否有可能,那些超出到另一行的語(yǔ)句會(huì)在一個(gè)逗號(hào)或其他操作符之后與前面的語(yǔ)
6、句相連。當(dāng)一個(gè)語(yǔ)句被打斷相連時(shí),它應(yīng)比原來(lái)的那一行語(yǔ)句縮進(jìn)兩個(gè)字符。2.3 Begin.End 配對(duì)Begin 子句應(yīng)寫在獨(dú)立的一行。例如,下面第一行是錯(cuò)誤的寫法而第二行是正確的。for I := 0 to 10 do begin /錯(cuò)誤,begin同for在同一行for I := 0 to 10 do /正確,begin出現(xiàn)在獨(dú)立的一行begin這個(gè)規(guī)則的例外是當(dāng)begin子句的出現(xiàn)是作為一個(gè)else子句的一部分參考例子:if some statement thenbegin .endelse begin someOtherStatement;end;end 語(yǔ)句永遠(yuǎn)出現(xiàn)在獨(dú)立的一行。當(dāng)be
7、gin語(yǔ)句不是一個(gè)else子句的一部分時(shí),相應(yīng)的end語(yǔ)句永遠(yuǎn)縮進(jìn)到與begin部分相對(duì)應(yīng)的位置。文檔頂端三、Object Pascal3.1 括號(hào)永遠(yuǎn)不要在括號(hào)與括號(hào)之間的字符中間留下空格。下面的例子示范了錯(cuò)誤的與正確地使用括號(hào)中的空格: CallProc( Aparameter ); /錯(cuò)誤 CallProc(Aparameter); /正確永遠(yuǎn)不要在一個(gè)語(yǔ)句中使用不必要的括號(hào)。括號(hào)只應(yīng)在源代碼中需要的地方使用。以下的例子示范了錯(cuò)誤和正確的使用:if (I = 42) then /錯(cuò)誤 多余的括號(hào)if (I = 42) or (J = 42) then /正確 需要括號(hào)3.2 保留字和關(guān)鍵
8、字Object Pascal 保留字和關(guān)鍵字永遠(yuǎn)是全部小寫。3.3 過(guò)程和函數(shù)(例程) 命名/格式化例程的名字永遠(yuǎn)應(yīng)該以大寫的字母開(kāi)頭并且中間錯(cuò)落分明以便于可讀性。下面是一個(gè)不正確格式的過(guò)程名稱: procedure thisisapoorlyformattedroutinename;下面是一個(gè)合適的大小寫例程名稱的例子: procedure ThisIsMuchMoreReadableRoutineName;例程的名稱應(yīng)該同它的內(nèi)容相符。一個(gè)會(huì)導(dǎo)致某個(gè)行為的例程應(yīng)以動(dòng)詞開(kāi)頭。例如: procedure FormatHardDrive;一個(gè)用于設(shè)置輸入?yún)?shù)的例程應(yīng)以單詞set作為前綴,例如:
9、procedure SetUserName;一個(gè)用來(lái)接收某個(gè)值的例程應(yīng)以單詞get作為前綴,例如: procedure GetUserName : string; 形式參數(shù).1 格式化如果有的話,相同類型的形參應(yīng)合并在一個(gè)語(yǔ)句中: procedure Foo(Param1, Param2, Param3 : Integer; Param4 : string);.2 命名所有形參的名字應(yīng)是十分符合它們所代表的意義,特別是應(yīng)該以傳送到例程中的標(biāo)志符的名稱為基礎(chǔ)。一個(gè)好的參數(shù)名稱應(yīng)以字符A為前綴 例如: procedure SomeProc(AuserName : string; AuserAge
10、: integer);“A”前綴按約定表示該參數(shù)的名稱是與類類型中的一個(gè)屬性或域的名稱相對(duì)應(yīng)的。.3 參數(shù)的排序下面的形參的順序重點(diǎn)說(shuō)明了注冊(cè)者調(diào)用約定調(diào)用的好處。 最常用的參數(shù)應(yīng)放在第一位,其它的參數(shù)應(yīng)按從左到右的順序排列。 輸入?yún)?shù)列表應(yīng)放在輸出參數(shù)列表的左邊。 將通用的參數(shù)放在特殊參數(shù)的左邊,例如: procedure SomeProc(Aplanet, AContinent, Acountry, Astate, Acity) 排序有可能有些例外,比如事件的處理。類型為TObject的Sender參數(shù)經(jīng)常放在第一位。.4 常量參數(shù)當(dāng)一個(gè)參數(shù)為記錄型、數(shù)組類型、ShortString、或接
11、口類型并且在例程中不被改變時(shí),這些參數(shù)應(yīng)做上常量標(biāo)記。這樣做會(huì)讓編譯器更加有效率的產(chǎn)生有關(guān)這些不改變的參數(shù)的代碼。而例程中另外一些非變參數(shù)也可常量來(lái)傳送。盡管這樣做沒(méi)有產(chǎn)生任何效果和提高效率,這將會(huì)給調(diào)用例程的使用者提供更多的信息。.5 名稱的沖突當(dāng)使用擁有兩個(gè)名稱相同的例程的兩個(gè)單元時(shí),如果你調(diào)用該例程時(shí),在uses子句中排在后面的單元中的例程將會(huì)被調(diào)用。為了解決這種“在uses子句上的模糊”沖突,要在調(diào)用該例程時(shí)寫上相關(guān)的單元的前綴,例如: sysUtile.FindClose(SR);或 windows.FindClose(Handle);3.4 變量 變量的命名和格式變量的命名應(yīng)以使用
12、它們的目的相符循環(huán)控制變量應(yīng)采用一個(gè)單獨(dú)的字符作為名字,比如 I,J,或K,也可以采用更加有意義的名字,比如 UserIndex。邏輯變量的名字應(yīng)能充分表達(dá)準(zhǔn)確的真或假的意思。 局部變量一個(gè)過(guò)程中的局部變量應(yīng)遵循所有其它變量的使用和命名約定。臨時(shí)變量的取名應(yīng)合理。如果必須的話,在一進(jìn)入例程就應(yīng)初始化局部變量。局部的AnsiString變量會(huì)自動(dòng)初始化為一個(gè)空的字符串。局部接口和派分接口類型變量將會(huì)自動(dòng)初始化為nil,并且局部變數(shù)和ole變數(shù)類型變量會(huì)自動(dòng)初始化為Unassigned 全局變量的使用使用全局變量是不推薦的。但是,在某些時(shí)候還是必須使用,而且它們也只應(yīng)在必須使用的時(shí)候才使用。在這種
13、時(shí)候,你應(yīng)努力只在一段上下文范圍內(nèi)使用全局變量。例如,一個(gè)全局變量只應(yīng)在一個(gè)單元的implemntation部分內(nèi)是全局的。如果打算在多個(gè)單元類使用全局?jǐn)?shù)據(jù),你應(yīng)將它們移到一個(gè)公共的單元中然后被其它所有單元使用。全局變量可以在var子句中直接初始化為一個(gè)值。記住,所有的全局?jǐn)?shù)據(jù)會(huì)自動(dòng)初始化為0,因此不要將全局變量初始化為一個(gè)“空”值比如 0、nil、Unassigned、等等。這樣做的一個(gè)理由是因?yàn)榱愠跏蓟娜謹(jǐn)?shù)據(jù)在exe文件中不會(huì)占據(jù)任何空間。零初始化數(shù)據(jù)被存儲(chǔ)在一個(gè)虛擬的數(shù)據(jù)段,它在應(yīng)用程序啟動(dòng)后被分配在一段內(nèi)存中。非零初始化的全局?jǐn)?shù)據(jù)在硬盤的exe文件占用空間。3.5 類型 大寫約定如
14、果類型的名字是保留字,那么它應(yīng)全部小寫。Win32 API類型通常全部大寫,并且你必須遵循在Windows.pas或其他API單元中的詳細(xì)類型名稱的約定。對(duì)于其他變量名字,地一個(gè)字母應(yīng)為大寫,而其他字母應(yīng)錯(cuò)落有致。下面是一些例子: var MyString : string; /保留字 WindowHandle : HWND; /Win32 API 類型 I : Integer; /在System單元中引進(jìn)的類型標(biāo)識(shí)符.1 浮點(diǎn)指針類型不推薦使用Real類型,因?yàn)樗拇嬖谥皇菫榱讼蚯凹嫒菰缙诘腜ascal代碼。在通常情況下用Double來(lái)實(shí)現(xiàn)浮點(diǎn)指針的需要。并且,Double對(duì)處理器和總線而言
15、是做了最優(yōu)化處理的,它也是IEEE中定義的標(biāo)準(zhǔn)數(shù)據(jù)格式。只有當(dāng)需要的范圍超出Double所定義的范圍時(shí)才使用Extended。Extended是intel定義的類型且在Java中不支持。只有當(dāng)浮點(diǎn)指針變量的實(shí)際字節(jié)大小有其意義時(shí)才使用Single。(比如當(dāng)使用另一種語(yǔ)言的DLLs時(shí))。.2 枚舉類型枚舉類型的名字需符合使用該類型的目的。該類型的名字需以字符T為前綴,以表明這是一個(gè)類型。枚舉類型中的標(biāo)識(shí)符列表必須包含兩個(gè)或三個(gè)字符的前綴來(lái)對(duì)應(yīng)于該枚舉類型的名字 例如: TsongType = (stRock, stClassical, stCountry, stAlternative, stHe
16、avyMetal, stRB);一個(gè)枚舉類型的實(shí)例的名字應(yīng)與不要前綴的枚舉類型(SongType)相同,除非有更好的原因來(lái)賦予該變量更特殊的名字,比如:FavoriteSongType1,FavoriteSongType2 等等。.3 變數(shù)和ole變數(shù)類型通常不建議使用變數(shù)和Ole變數(shù)類型。但在只有運(yùn)行時(shí)刻才能知道數(shù)據(jù)類型的程序中必須使用該類型,這種情形多出現(xiàn)在COM和數(shù)據(jù)庫(kù)開(kāi)發(fā)中。Ole變數(shù)使用在以COM為基礎(chǔ)的編程中例如自動(dòng)化和ActiveX控制,而變數(shù)使用在非COM的編程中,這是因?yàn)樽償?shù)可以十分有效地存儲(chǔ)本地Delphi字符串(同一個(gè)字符串變量一樣),但Ole變數(shù)會(huì)將所有的字符串轉(zhuǎn)換為O
17、le字符串(WideChar 字符串)并且并不實(shí)例運(yùn)算 它們永遠(yuǎn)拷貝。 結(jié)構(gòu)類型.1 數(shù)組類型數(shù)組類型的名字需符合它們使用的目的。該類型的名字必須加以前綴T。如果須聲明該數(shù)組類型的指針,那么該指針需加以前綴P而且應(yīng)立即聲明在該數(shù)組聲明的前面。例如: type PCycleArray = TCycleArray; TCycleArray = array1.100 of integer;在實(shí)際應(yīng)用中,數(shù)組的變量實(shí)例的名稱應(yīng)是其類型的名字去掉前綴T。.2 記錄類型記錄類型的名字應(yīng)符合使用它們的目的。其類型的聲明應(yīng)加以前綴T。如果要聲明該記錄類型的指針,就應(yīng)加以前綴P并且應(yīng)緊靠在類型聲明的前面聲明。例
18、如: type PEmployee = TEmployee; TEmployee = record EmployeeName : string; EmployeeRate : Double; end;3.6 語(yǔ)句 if 語(yǔ)句在if/then/else語(yǔ)句中最常發(fā)生的行為應(yīng)放在then子句中,而其它發(fā)生可能性較小的行為應(yīng)放在else子句中。盡量避免使用嵌套的if語(yǔ)句,在這種情形下應(yīng)用多個(gè)if語(yǔ)句來(lái)判斷各種可能。不要使用if嵌套超過(guò)五級(jí)深度。應(yīng)使代碼編寫得更加清晰、明了。不要在if語(yǔ)句中使用不必要的圓括號(hào)。如果在if語(yǔ)句中有多個(gè)條件需測(cè)試,這些條件應(yīng)按計(jì)算強(qiáng)度由少到多的順序從左到右排列。這樣做能使
19、編譯器在編譯代碼時(shí)獲得布爾估算邏輯的捷徑,從而使你的代碼獲得最佳的優(yōu)化。舉例來(lái)說(shuō),如果條件1快過(guò)條件2,而條件2快過(guò)條件3,那么在if語(yǔ)句中的排列應(yīng)是: if 條件1 and 條件2 and 條件3 then case 語(yǔ)句.1 一般性話題在一個(gè)case語(yǔ)句中的各個(gè)獨(dú)立的單元應(yīng)以數(shù)字或字母順序排列。每一個(gè)case單元的動(dòng)作行為應(yīng)保持簡(jiǎn)單而不應(yīng)該超過(guò)四到五行代碼。如果所要執(zhí)行的動(dòng)作過(guò)于復(fù)雜應(yīng)采用獨(dú)立的過(guò)程或函數(shù)。Case語(yǔ)句中的else子句只有當(dāng)需要缺省行為或處理錯(cuò)誤時(shí)才使用。.2 格式case語(yǔ)句應(yīng)遵循其它結(jié)構(gòu)的縮格和命名約定。 while 語(yǔ)句在一個(gè)while語(yǔ)句中不建議使用exit過(guò)程來(lái)跳
20、出循環(huán),盡量?jī)H使用循環(huán)條件來(lái)跳出循環(huán)。在一個(gè)while循環(huán)中所用的初始化代碼應(yīng)緊靠在進(jìn)入while循環(huán)前面出現(xiàn)而不要被其它不相關(guān)的語(yǔ)句隔開(kāi)。任何結(jié)束后的處理應(yīng)在循環(huán)之后立即進(jìn)行。 for 語(yǔ)句for語(yǔ)句只有當(dāng)循環(huán)次數(shù)已知的情況下才能取代while語(yǔ)句使用。 repeat 語(yǔ)句repeat語(yǔ)句的使用同while語(yǔ)句一樣,并且遵循同樣的通用方針。 with 語(yǔ)句.1 一般話題with語(yǔ)句應(yīng)節(jié)省使用,并且?guī)в写罅康木妗1苊膺^(guò)度使用with語(yǔ)句并且在with語(yǔ)句中小心使用多個(gè)對(duì)象、記錄等等。例如: with Record1, Record2 do這些事情會(huì)使程序員感到困惑并難以發(fā)現(xiàn)問(wèn)題所在。.2 格
21、式with 語(yǔ)句遵循本文檔所說(shuō)明的命名約定和縮格的格式規(guī)則。3.7 結(jié)構(gòu)異常處理 一般話題異常的處理大量地使用在錯(cuò)誤糾正和資源保護(hù)方面。這就是說(shuō)一旦資源被分配,一個(gè)try.finally必需加以使用來(lái)保證該資源被正確的釋放。這種異常的保護(hù)也是指在一個(gè)單元的initializition/finalization或一個(gè)對(duì)象的constructor/destructor中進(jìn)行資源的分配和釋放。 try.finally的使用任何情形下,每一次的分配都應(yīng)跟隨一個(gè)try.finally。舉例來(lái)說(shuō),下面的代碼會(huì)造成可能的錯(cuò)誤: SomeClass1 := TsomeClass.Create; SomeCla
22、ss2 ;= TsomeClass.Create; try do some code finally SomeClass1.Free; SomeClass2.Free; end;一個(gè)更安全更合適的分配過(guò)程應(yīng)是: SomeClass1 := TSomeClass.Create; try SomeClass2 := TsomeClass.Create; try do some code finally SomeClass2.Free; end; finally SomeClass1.Free; end; try.except的使用只有當(dāng)在異常被觸發(fā)而你想執(zhí)行一些任務(wù)時(shí)才使用try.except。通
23、常,你沒(méi)有必要為了只是簡(jiǎn)單地在屏幕上顯示一個(gè)錯(cuò)誤信息而使用try.except語(yǔ)句,因?yàn)檫@會(huì)被Application對(duì)象自動(dòng)執(zhí)行。如果你想在except子句中執(zhí)行完一些任務(wù)之后調(diào)用缺省的異常處理,使用raise來(lái)重新觸發(fā)異常到下一個(gè)句柄。 try.except.else的使用try.except中的else子句不建議使用,因?yàn)樗鼤?huì)打斷所有的異常包括那些你沒(méi)有準(zhǔn)備的異常。3.8 類類型 命名和格式類類型的名稱應(yīng)符合使用它們的目的。類型名字應(yīng)加以前綴T以表明這是一個(gè)類型的定義 例如:type Tcustomer = class(TObject)類型的實(shí)例通常是沒(méi)有前綴T的類型的名字 例如:var
24、Customer :Tcustomer;注意:查閱“構(gòu)件類型的命名標(biāo)準(zhǔn)”來(lái)獲得更多有關(guān)構(gòu)件命名的信息。 域.1 命名/格式類的域名遵循與變量標(biāo)識(shí)符同樣的約定除了它們應(yīng)以F為前綴,來(lái)表明這是一個(gè)域的名稱。.2 可視化所有的域都必需是私有的。想在類的范圍之外存取域得通過(guò)屬性來(lái)使用。 方法.1 命名/格式方法的命名應(yīng)遵循本文檔中有關(guān)過(guò)程和函數(shù)的約定敘述。.2 使用靜態(tài)的方法如果使用一個(gè)靜態(tài)的方法,那么該方法就不能被該類的后代類所繼承。.3 使用虛擬/動(dòng)態(tài)的方法如果你打算該類的方法能被后代的類所繼承就得使用虛擬的方法。只有在該方法有多個(gè)繼承時(shí)(直接的或間接的)才使用動(dòng)態(tài)的方法。例如,一個(gè)類類型包含一個(gè)
25、可繼承的方法,而100個(gè)后代類要繼承這種方法,那么這個(gè)方法就會(huì)動(dòng)態(tài)地產(chǎn)生為100個(gè)后代類使用的內(nèi)存。.4 使用抽象的方法如果在一個(gè)類中使用抽象的方法,該類就不能被創(chuàng)建。只有在那些永遠(yuǎn)不會(huì)被創(chuàng)建的類中使用抽象的方法。.5 屬性存取方法所有存取類的方法都只能出現(xiàn)在類的private或protected部分。屬性存取方法的命名應(yīng)遵循過(guò)程和函數(shù)的約定規(guī)則。讀取存取方法(方法讀取器)必需以單詞Get為前綴。寫入存取方法(方法寫入器)必需以單詞Set為前綴。方法寫入器的參數(shù)的名字應(yīng)為Value,并且它的類型應(yīng)是它所操作的屬性的類型。例如: TSomeClass = class(TObject) priva
26、te FsomeField : Integer; protected function GetSomeField : Integer; procedure SetSomeField(Value : Integer); public property SomeField : Integer read GetSomeField write SetSomeField; end; 屬性.1 命名/格式屬性如果是表示為一個(gè)私有域的存取器的話,那么它的名字應(yīng)是它們所操作的域的名字除去解釋符F。屬性的名字應(yīng)是名詞,不是動(dòng)詞。屬性表示的是數(shù)據(jù),而方法表示的是行為。數(shù)組類型的名稱應(yīng)為復(fù)數(shù)。一般情況下屬性的名稱應(yīng)
27、為單數(shù)。.2 使用存取的方法盡管沒(méi)有要求,但還是建議盡量少地為一個(gè)表示私有域的屬性而使用寫入存取方法。四、文件4.1 工程文件 命名工程文件應(yīng)取個(gè)描述性的名字。例如,Delphi 4開(kāi)發(fā)者指南錯(cuò)誤管理器 的工程名字是:DDGBugs.dpr。一個(gè)有關(guān)系統(tǒng)信息的程序的名字就應(yīng)象 SysInfo.dpr。4.2 窗體文件 命名一個(gè)窗體文件的取名應(yīng)可以描述使用該窗體的目的,并加以后綴Frm。例如,一個(gè)“關(guān)于”的窗體的文件名應(yīng)是AboutFrm.dpr。主窗體的文件名應(yīng)是MainFrm.dpr。4.3 數(shù)據(jù)模板文件 命名數(shù)據(jù)模板的取名應(yīng)能表示使用該數(shù)據(jù)模板的目的,它的名稱應(yīng)加以兩個(gè)字符的后綴DM。例如
28、,自定義數(shù)據(jù)模板的文件名字應(yīng)為CustomersDM.dfm。4.4 遠(yuǎn)端數(shù)據(jù)模板文件 命名遠(yuǎn)端數(shù)據(jù)模板的取名應(yīng)能表示使用該遠(yuǎn)端數(shù)據(jù)模板的目的,它的名稱應(yīng)加以三個(gè)字符的后綴RDM。例如,自定義遠(yuǎn)端數(shù)據(jù)模板的文件名字應(yīng)為CustomersRDM.dfm。4.5 Unit文件 通用Unit結(jié)構(gòu).1 unit的名字Unit文件應(yīng)取一個(gè)可描述性的名字。例如,包含應(yīng)用程序主窗體的單元應(yīng)叫做MainFrm.pas。.2 uses子句在interface部分的uses子句應(yīng)包含在interface部分中的代碼所需要的單元。去掉那些Delphi可以自動(dòng)加入到程序中的單元。在implementation部分的u
29、ses子句應(yīng)只包含在implementation部分中的代碼所需要的單元的名字。去掉不必要的單元。.3 interface部分interface部分應(yīng)包含只那些其它單元所需要存取類型的定義、變量、過(guò)程/函數(shù)的預(yù)定義等等。否則,就應(yīng)放在implementation部分定義。.4 implementation部分implementation部分應(yīng)包含那些只在本單元中私用的類型定義、變量、過(guò)程/函數(shù)定義等等。.5 initialization部分不要在initialization 部分放入耗時(shí)長(zhǎng)的代碼,這將使程序的第一個(gè)界面出現(xiàn)得比較緩慢。.6 finalization部分在這里要保證釋放你在Ini
30、tialization部分所分配的任何資源。 窗體單元.1 命名一個(gè)窗體的單元文件應(yīng)擁有與它所對(duì)應(yīng)的窗體文件同樣的名稱。例如,“關(guān)于”窗體的單元名稱應(yīng)為 AboutFrm.pas,而主窗體的單元名稱應(yīng)為MainFrm.pas。 數(shù)據(jù)模板單元.1 命名一個(gè)數(shù)據(jù)模板的單元文件應(yīng)擁有與它所對(duì)應(yīng)的數(shù)據(jù)模板文件同樣的名稱。例如,一個(gè)自定義數(shù)據(jù)模板單元的名稱應(yīng)為CustomersDM.pas。 一般目的單元.1 命名一般目的單元的取名應(yīng)符合使用該單元的目的。例如,一個(gè)實(shí)用程序單元取名為BugUtilities.pas。一個(gè)包含全局變量的單元取名為CustomerGlobals.pas。注意,該單元的名字不
31、能與它的工程中所使用的所有包中的單元的名字相同。不贊成使用一般的或通用的單元名字。 構(gòu)件單元.1 命名構(gòu)件單元應(yīng)放在獨(dú)立的目錄,以將它們同定義構(gòu)件組或構(gòu)件集合的單元區(qū)分開(kāi)來(lái)。它們要永遠(yuǎn)同工程在不同的目錄。單元名字應(yīng)同它們的內(nèi)容相符。注意:查閱“用戶定義的構(gòu)件”部分來(lái)獲得更多有關(guān)構(gòu)件命名標(biāo)準(zhǔn)的信息。4.6 文件頭建議在所有源文件、工程文件、單元等等中使用信息化文件頭。一個(gè)良好的文件頭應(yīng)包含以下信息: 版權(quán). 著作的年、月、日.五、窗體和數(shù)據(jù)模板5.1 窗體 窗體類型命名標(biāo)準(zhǔn)窗體類型的取名應(yīng)能表達(dá)使用該窗體的目的。類型定義應(yīng)加以前綴T。前綴后面跟隨著描述性的名字。最后,應(yīng)加以Form后綴來(lái)描述名字
32、。例如,一個(gè)“關(guān)于”的窗體的類型的名字應(yīng)為: TAboutFrom = class(TForm);主窗體的定義為: TMainForm = class(TForm);一個(gè)用戶接入窗體的名字應(yīng)象: TCustomerEntryForm = class(TForm); 窗體實(shí)例命名標(biāo)準(zhǔn)窗體實(shí)例應(yīng)是沒(méi)有帶前綴T的相應(yīng)類的名字。例如,對(duì)應(yīng)于前面窗體類型而言,其實(shí)例的名字應(yīng)為: 類型名稱 實(shí)例名稱 TAboutForm AboutForm TMainForm MainForm TCustomerEntryForm CustomerEntryForm 自動(dòng)創(chuàng)建窗體只有主窗體可以是自動(dòng)創(chuàng)建的除非有其它更好的
33、理由不這樣做。所有其它的窗體必需從工程選項(xiàng)對(duì)話框中的自動(dòng)創(chuàng)建列表中移走。查閱以下部分來(lái)獲得更多的信息。 模式窗體實(shí)例化函數(shù)所有的窗體單元都應(yīng)包含一個(gè)窗體實(shí)例化函數(shù),該函數(shù)用來(lái)創(chuàng)建、設(shè)置、模式地顯示窗體,并釋放窗體。該函數(shù)應(yīng)返回窗體的模式結(jié)果。該函數(shù)要傳遞的參數(shù)應(yīng)遵循本文檔指定的“參數(shù)傳遞”標(biāo)準(zhǔn)。通過(guò)這種方式封裝的函數(shù)性有助于代碼的再利用和維護(hù)。該窗體的變量要從單元中移走,并再窗體實(shí)例的函數(shù)中進(jìn)行本地式地定義。注意,這就意味著該窗體必需從工程/選項(xiàng)對(duì)話框中的自動(dòng)創(chuàng)建列表中剔除。參考本文檔后面的“自動(dòng)創(chuàng)建窗體”。例如,下面的單元展示了再GetUserData窗體中的一個(gè)函數(shù)。 unit UserD
34、ataFrm; interface useswindows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls; type TUserDataForm = class(TForm) edtUserName : TEdit; edtUserID : TEdit; private Private declarations public Public declarations end; function GetUserData(var aUserName : String; var aUserID : I
35、nteger) : Word; implementation $R *.DFM function GetUserData(var aUserName : String; var aUserID : Integer) : word; var UserDataForm : TuserDataForm; begin UserDataForm := TuserDataForm.Create(Application); try UserDataForm.Caption := Getting User Data; Result := UserDataForm.ShowModal; if (Result =
36、 mrOK) then begin end; finally UserDataForm.Free; end; end; end.5.2 數(shù)據(jù)模板 數(shù)據(jù)模板命名標(biāo)準(zhǔn)數(shù)據(jù)模板的取名要符合使用該數(shù)據(jù)模板的目的。類型的定義應(yīng)加以前綴T,后面緊接著描述性的名字,最后要加以后綴單詞“DataModule”。例如,一個(gè)自定義的數(shù)據(jù)模板有時(shí)候應(yīng)該象: TCustomerDataModule = class(TDataModule)一個(gè)命令式的數(shù)據(jù)模板的名字應(yīng)象: TOrdersDataModule = class(TDataModule) 數(shù)據(jù)模板實(shí)例命名標(biāo)準(zhǔn)數(shù)據(jù)模板實(shí)例的名稱應(yīng)是對(duì)應(yīng)不帶前綴T的類型的名稱。
37、例如,對(duì)于前面的窗體類型而言,其實(shí)例的名稱應(yīng)為: 類型名稱 實(shí)例名稱 TCustomerDataModule CustomerDataModule TOrdersDataModule OrdersDataModule六、包6.1 使用運(yùn)行包和設(shè)計(jì)包的比較運(yùn)行時(shí)刻的包應(yīng)只包含其它構(gòu)件包所要求的單元或構(gòu)件。另外,包含屬性/構(gòu)件編輯器和其它只為設(shè)計(jì)的代碼應(yīng)放入到設(shè)計(jì)時(shí)刻包中。注冊(cè)單元應(yīng)放在設(shè)計(jì)包中。6.2 文件命名標(biāo)準(zhǔn)包的名稱應(yīng)依照下面的例子:“iiilibvv.pkg” 設(shè)計(jì)時(shí)刻包“iiistdvv.pkg” 運(yùn)行時(shí)刻包字符“iii”表示一個(gè)3字符標(biāo)識(shí)前綴。這個(gè)前綴用來(lái)表明公司、個(gè)人或其它有標(biāo)識(shí)意
38、義的實(shí)體。字符“vv”表示為該包想要對(duì)應(yīng)Delphi某個(gè)版本的包的版本號(hào)。注意,包的名字中包含“l(fā)ib”或“std”的意思是表明這是一個(gè)設(shè)計(jì)時(shí)刻包還是一個(gè)運(yùn)行時(shí)刻包。如果既是設(shè)計(jì)時(shí)刻包又是運(yùn)行時(shí)刻包,該文件的命名是同上面一樣的,例如,為Delphi 4開(kāi)發(fā)者指南做的包的名稱應(yīng)為:DdgLib40.pkg - 設(shè)計(jì)時(shí)刻包DdgStd40.pkg - 運(yùn)行時(shí)刻包七、構(gòu)件7.1 用戶自定義構(gòu)件在標(biāo)準(zhǔn)構(gòu)件中命名出來(lái)的構(gòu)件的名稱同在“類類型”部分定義中的一樣定義成一個(gè)類類型,不同的是它們有一個(gè)3字符的指示前綴,這個(gè)前綴可以表示公司、個(gè)人或其它實(shí)體。例如,一個(gè)為Delphi 4開(kāi)發(fā)者指南編寫的時(shí)鐘構(gòu)件的名
39、稱定義為: TddgClock = class(TComponent)注意,那三個(gè)前綴字符是小寫的。7.2 構(gòu)件單元構(gòu)件單元應(yīng)只包含一個(gè)主要的構(gòu)件,一個(gè)主要的構(gòu)件是指出現(xiàn)在構(gòu)件欄中的構(gòu)件。主要構(gòu)件的輔助構(gòu)件/對(duì)象應(yīng)放入到同一個(gè)單元中。7.3 使用注冊(cè)單元構(gòu)件的注冊(cè)過(guò)程應(yīng)從構(gòu)件本身的單元中剔除,并放入到一個(gè)獨(dú)立的單元中。這個(gè)注冊(cè)單元可以用來(lái)注冊(cè)任何構(gòu)件、屬性編輯器、構(gòu)件編輯器、專家器等。構(gòu)件的注冊(cè)只應(yīng)在設(shè)計(jì)時(shí)刻包中進(jìn)行,注冊(cè)單元應(yīng)包含在設(shè)計(jì)時(shí)刻包中而不應(yīng)放在運(yùn)行時(shí)刻包中。推薦使用的注冊(cè)單元的名稱是:XxxReg.pas上面的3個(gè)前綴字符“Xxx”用來(lái)表示一個(gè)公司、個(gè)人或任何其它的實(shí)體。例如,在D
40、elphi 開(kāi)發(fā)者指南中的注冊(cè)單元的名稱應(yīng)為 DdgReg.pas。7.4 構(gòu)件實(shí)例命名約定所有的構(gòu)件都應(yīng)取個(gè)描述性的名稱。由Delphi創(chuàng)建的缺省名的構(gòu)件不會(huì)被遺棄。在設(shè)計(jì)構(gòu)件類型時(shí)應(yīng)設(shè)計(jì)一個(gè)小寫的前綴。使用前綴而不使用后綴的原因是在搜尋時(shí),在對(duì)象檢查器和代碼探索器中搜尋構(gòu)件的名字比搜尋構(gòu)件的類型更容易實(shí)現(xiàn)。7.5 構(gòu)件的前綴以下構(gòu)件的前綴可以用來(lái)設(shè)計(jì)Delphi 4中的標(biāo)準(zhǔn)構(gòu)件。請(qǐng)?jiān)诖肆斜碇屑尤氲谌綐?gòu)件的前綴。7.6 Standard頁(yè)前綴 構(gòu)件mm TMainMenupm TPopupMenummi TMainMenuItempmi TPopupMenuItem前綴 構(gòu)件lbl TLa
41、beledt TEditmem TMemobtn TButtoncb TCheckBoxrb TRadioBoxlb TListBoxcb TComboBoxscb TScrollBargb TGroupBoxrg TRadioGrouppnl TPanelcl TCommandList7.7 Additional頁(yè)bbtn TBitBtnsb TSpeedButtonme TMaskEditsg TStringGriddg TDrawGridimg TImageshp TShapebvl TBevelsbx TScrollBoxclb TCheckListboxspl TSplitterst
42、x TStaticTextcht TChart7.8 Win32頁(yè)tbc TTabControlpgc TPageControlil TImageListre TRichEditthr TTrackBarprb TProgressBarud TUpDownhk THotKeyani TAnimatedtp TDateTimePickertv TTreeViewlv TListViewhdr THeaderControl前綴 構(gòu)件stb TStatusBartlb TToolBarclb TCoolBar7.9 System頁(yè)tm TTimerpb TPaintBoxmp TMediaPlaye
43、rolec TOleContainerddcc TDDEClientItemddci TDDEClientItemddsc TDDEServerConvddsi TDDEServerItem7.10 Internet頁(yè)csk TClientSocketssk TServerSocketwbd TWebDispatcherpp TPageProducertp TQueryTableProducerdstp TDataSetTableProducernmdt TNMDayTimenec TNMEchonf TNMFingernftp TNMFtpnhttp TNMHttpnMsg TNMMsgnm
44、sg TNMMSGServnntp TNMNNTPnpop TNMPop3nuup TNMUUProcessorsmtp TNMSMTPnst TNMStrmnsts TNMStrmServntm TNMTimenudp TNMUdppsk TPowerSockngs TNMGeneralServerhtml THtmlurl TNMUrlsml TSimpleMail7.11 Data Access頁(yè)前綴 構(gòu)件ds TDataSourcetbl TTableqry TQuerysp TStoredProcdb TDataBasessn TSessionbm TBatchMoveusql TUpdateSQL7.12 Data Controls頁(yè)dbg TDBGriddbn TDBNavigatordbt TDBTextdbe TDBEditdbm TDBMe
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 簡(jiǎn)明法語(yǔ)教程課件
- 單位管理制度展示大合集【員工管理篇】
- 艾羅能源(688717)新產(chǎn)品與新市場(chǎng)老牌戶儲(chǔ)企業(yè)打開(kāi)第二成長(zhǎng)曲線
- 單位管理制度收錄大合集人力資源管理十篇
- 單位管理制度品讀選集人員管理十篇
- 《口腔內(nèi)科護(hù)理評(píng)估》課件
- 2022年內(nèi)蒙古呼倫貝爾市牙克石市初中畢業(yè)生學(xué)業(yè)水平模擬測(cè)
- 2025年中國(guó)勞動(dòng)防護(hù)手套市場(chǎng)深度調(diào)研分析及投資前景研究預(yù)測(cè)報(bào)告
- 2025年中國(guó)單烷基醚磷酸酯醚行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 2020-2025年中國(guó)無(wú)芯卷筒紙行業(yè)發(fā)展?jié)摿Ψ治黾巴顿Y方向研究報(bào)告
- 行政大樓管理規(guī)章制度
- 《治安管理處罰法》輔導(dǎo)講座課件
- 國(guó)家開(kāi)放大學(xué)1116《機(jī)電控制工程基礎(chǔ)》
- 程琳-職業(yè)生涯分析與規(guī)劃
- 仁愛(ài)英語(yǔ)九年級(jí)總復(fù)習(xí)教案
- 心電圖基本知識(shí)PPT
- GB/T 5130-1997電氣用熱固性樹(shù)脂工業(yè)硬質(zhì)層壓板試驗(yàn)方法
- FZ/T 01041-2014絨毛織物絨毛長(zhǎng)度和絨毛高度的測(cè)定
- 中小學(xué)食材配送中心項(xiàng)目建設(shè)可行性研究報(bào)告
- 人體解剖上肢血管
- 精品解析浙教版科學(xué) 九年級(jí)上冊(cè) 3.43 簡(jiǎn)單機(jī)械之機(jī)械效率 同步練習(xí)
評(píng)論
0/150
提交評(píng)論