




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、Delphi 程序員代碼編寫標準指南一、序言本文檔詳述了在Delphi 開發(fā)者指南下進行編程的代碼編寫標準。在通常情況下,本文檔遵循“取消”式格式的指引方針,該方針由Borland國際通過一些例外來使用。在Delphi 開發(fā)者指南中包含本文檔的目的在于闡述一種方法,通過該方法,開發(fā)小組可以在他們所編寫的代碼中保持一貫的風格。這樣做的目的是使在開發(fā)小組中的每一個程序員都可以明白其他程序員的代碼。這有助于提高代碼編寫的可讀性和使用的一貫性。本文檔并不意味著包含了所有存在于代碼中的標準。但是,它的內(nèi)容已足夠幫你起個好頭。你可以自由的增加修改這些標準來滿足你的需要。我們不贊成你偏離這些由Borland
2、開發(fā)人員所使用的標準太遠。我們推薦這么做是因為一旦有新的程序員加入到你的開發(fā)小組中,而他們最喜歡和最熟悉的是Borland的標準。象大多數(shù)代碼標準文檔,本文檔也會根據(jù)需要進行改動。因此,你可以到/ddg中找到最新的更新版本。本文檔不包括用戶接口標準。本文檔是獨立的但也是同樣重要的。已經(jīng)有足夠的第三方書籍和Microsoft文檔包括了另外一些指導方針,而我們決定并不復制這些信息,但我們會指引你到Microsoft Developers Network 和一些資源,在那兒可以找到你所需的信息。二、通用源代碼格式規(guī)則2.1 縮格縮格是指在每一級有兩個空格。不要在源代碼中
3、保留tab字符,這是因為tab字符會隨著不同用戶的不同設置和不同的資源管理工具(打印、文檔、版本控制等)而代表不同的寬度。你可以通過關閉Environment選項對話框中Editor頁上的“Use tab character”和“Optimal fill”檢查框(通過Tools|Environment)來禁止保存tab字符。2.2 頁邊空格頁邊空格會被設置成80字符寬。通常,源碼不會超出這個邊界,但這個方針會有一些彈性。不管是否有可能,那些超出到另一行的語句會在一個逗號或其他操作符之后與前面的語句相連。當一個語句被打斷相連時,它應比原來的那一行語句縮進兩個字符。2.3 Begin.End 配對
4、Begin 子句應寫在獨立的一行。例如,下面第一行是錯誤的寫法而第二行是正確的。for I := 0 to 10 do begin /錯誤,begin同for在同一行for I := 0 to 10 do /正確,begin出現(xiàn)在獨立的一行begin這個規(guī)則的例外是當begin子句的出現(xiàn)是作為一個else子句的一部分參考例子:if some statement thenbegin .endelse begin someOtherStatement;end;end 語句永遠出現(xiàn)在獨立的一行。當begin語句不是一個else子句的一部分時,相應的end語句永遠縮進到與begin部分相對應的位置。三
5、、Object Pascal3.1 括號永遠不要在括號與括號之間的字符中間留下空格。下面的例子示范了錯誤的與正確地使用括號中的空格: CallProc( Aparameter ); /錯誤 CallProc(Aparameter); /正確永遠不要在一個語句中使用不必要的括號。括號只應在源代碼中需要的地方使用。以下的例子示范了錯誤和正確的使用:if (I = 42) then /錯誤 多余的括號if (I = 42) or (J = 42) then /正確 需要括號3.2 保留字和關鍵字Object Pascal 保留字和關鍵字永遠是全部小寫。3.3 過程和函數(shù)(例程)3.3.1 命名/格式
6、化例程的名字永遠應該以大寫的字母開頭并且中間錯落分明以便于可讀性。下面是一個不正確格式的過程名稱: procedure thisisapoorlyformattedroutinename;下面是一個合適的大小寫例程名稱的例子: procedure ThisIsMuchMoreReadableRoutineName;例程的名稱應該同它的內(nèi)容相符。一個會導致某個行為的例程應以動詞開頭。例如: procedure FormatHardDrive;一個用于設置輸入?yún)?shù)的例程應以單詞set作為前綴,例如: procedure SetUserName;一個用來接收某個值的例程應以單詞get作為前綴,例如:
7、 procedure GetUserName : string;3.3.2 形式參數(shù) 格式化如果有的話,相同類型的形參應合并在一個語句中: procedure Foo(Param1, Param2, Param3 : Integer; Param4 : string); 命名所有形參的名字應是十分符合它們所代表的意義,特別是應該以傳送到例程中的標志符的名稱為基礎。一個好的參數(shù)名稱應以字符A為前綴 例如: procedure SomeProc(AuserName : string; AuserAge : integer);“A”前綴按約定表示該參數(shù)的名稱是與類類型中的
8、一個屬性或域的名稱相對應的。 參數(shù)的排序下面的形參的順序重點說明了注冊者調(diào)用約定調(diào)用的好處。 最常用的參數(shù)應放在第一位,其它的參數(shù)應按從左到右的順序排列。 輸入?yún)?shù)列表應放在輸出參數(shù)列表的左邊。 將通用的參數(shù)放在特殊參數(shù)的左邊,例如: procedure SomeProc(Aplanet, AContinent, Acountry, Astate, Acity) 排序有可能有些例外,比如事件的處理。類型為TObject的Sender參數(shù)經(jīng)常放在第一位。 常量參數(shù)當一個參數(shù)為記錄型、數(shù)組類型、ShortString、或接口類型并且在例程中不被改變時,這些參數(shù)應做上常量
9、標記。這樣做會讓編譯器更加有效率的產(chǎn)生有關這些不改變的參數(shù)的代碼。而例程中另外一些非變參數(shù)也可常量來傳送。盡管這樣做沒有產(chǎn)生任何效果和提高效率,這將會給調(diào)用例程的使用者提供更多的信息。 名稱的沖突當使用擁有兩個名稱相同的例程的兩個單元時,如果你調(diào)用該例程時,在uses子句中排在后面的單元中的例程將會被調(diào)用。為了解決這種“在uses子句上的模糊”沖突,要在調(diào)用該例程時寫上相關的單元的前綴,例如: sysUtile.FindClose(SR);或 windows.FindClose(Handle);3.4 變量3.4.1 變量的命名和格式變量的命名應以使用它們的目的相符循環(huán)控制變量應
10、采用一個單獨的字符作為名字,比如 I,J,或K,也可以采用更加有意義的名字,比如 UserIndex。邏輯變量的名字應能充分表達準確的真或假的意思。3.4.2 局部變量一個過程中的局部變量應遵循所有其它變量的使用和命名約定。臨時變量的取名應合理。如果必須的話,在一進入例程就應初始化局部變量。局部的AnsiString變量會自動初始化為一個空的字符串。局部接口和派分接口類型變量將會自動初始化為nil,并且局部變數(shù)和ole變數(shù)類型變量會自動初始化為Unassigned3.4.3 全局變量的使用使用全局變量是不推薦的。但是,在某些時候還是必須使用,而且它們也只應在必須使用的時候才使用。在這種時候,你
11、應努力只在一段上下文范圍內(nèi)使用全局變量。例如,一個全局變量只應在一個單元的implemntation部分內(nèi)是全局的。如果打算在多個單元類使用全局數(shù)據(jù),你應將它們移到一個公共的單元中然后被其它所有單元使用。全局變量可以在var子句中直接初始化為一個值。記住,所有的全局數(shù)據(jù)會自動初始化為0,因此不要將全局變量初始化為一個“空”值比如 0、nil、Unassigned、等等。這樣做的一個理由是因為零初始化的全局數(shù)據(jù)在exe文件中不會占據(jù)任何空間。零初始化數(shù)據(jù)被存儲在一個虛擬的數(shù)據(jù)段,它在應用程序啟動后被分配在一段內(nèi)存中。非零初始化的全局數(shù)據(jù)在硬盤的exe文件占用空間。3.5 類型3.5.1 大寫約定
12、如果類型的名字是保留字,那么它應全部小寫。Win32 API類型通常全部大寫,并且你必須遵循在Windows.pas或其他API單元中的詳細類型名稱的約定。對于其他變量名字,地一個字母應為大寫,而其他字母應錯落有致。下面是一些例子: var MyString : string; /保留字 WindowHandle : HWND; /Win32 API 類型 I : Integer; /在System單元中引進的類型標識符 浮點指針類型不推薦使用Real類型,因為它的存在只是為了向前兼容早期的Pascal代碼。在通常情況下用Double來實現(xiàn)浮點指針的需要。并且,Double對處理
13、器和總線而言是做了最優(yōu)化處理的,它也是IEEE中定義的標準數(shù)據(jù)格式。只有當需要的范圍超出Double所定義的范圍時才使用Extended。Extended是intel定義的類型且在Java中不支持。只有當浮點指針變量的實際字節(jié)大小有其意義時才使用Single。(比如當使用另一種語言的DLLs時)。 枚舉類型枚舉類型的名字需符合使用該類型的目的。該類型的名字需以字符T為前綴,以表明這是一個類型。枚舉類型中的標識符列表必須包含兩個或三個字符的前綴來對應于該枚舉類型的名字 例如: TsongType = (stRock, stClassical, stCountry, stAltern
14、ative, stHeavyMetal, stRB);一個枚舉類型的實例的名字應與不要前綴的枚舉類型(SongType)相同,除非有更好的原因來賦予該變量更特殊的名字,比如:FavoriteSongType1,FavoriteSongType2 等等。 變數(shù)和ole變數(shù)類型通常不建議使用變數(shù)和Ole變數(shù)類型。但在只有運行時刻才能知道數(shù)據(jù)類型的程序中必須使用該類型,這種情形多出現(xiàn)在COM和數(shù)據(jù)庫開發(fā)中。Ole變數(shù)使用在以COM為基礎的編程中例如自動化和ActiveX控制,而變數(shù)使用在非COM的編程中,這是因為變數(shù)可以十分有效地存儲本地Delphi字符串(同一個字符串變量一樣),但O
15、le變數(shù)會將所有的字符串轉(zhuǎn)換為Ole字符串(WideChar 字符串)并且并不實例運算 它們永遠拷貝。3.5.2 結構類型 數(shù)組類型數(shù)組類型的名字需符合它們使用的目的。該類型的名字必須加以前綴T。如果須聲明該數(shù)組類型的指針,那么該指針需加以前綴P而且應立即聲明在該數(shù)組聲明的前面。例如: type PCycleArray = TCycleArray; TCycleArray = array1.100 of integer;在實際應用中,數(shù)組的變量實例的名稱應是其類型的名字去掉前綴T。 記錄類型記錄類型的名字應符合使用它們的目的。其類型的聲明應加以前綴T。如果要聲明該記
16、錄類型的指針,就應加以前綴P并且應緊靠在類型聲明的前面聲明。例如: type PEmployee = TEmployee; TEmployee = record EmployeeName : string; EmployeeRate : Double; end;3.6 語句3.6.1 if 語句在if/then/else語句中最常發(fā)生的行為應放在then子句中,而其它發(fā)生可能性較小的行為應放在else子句中。盡量避免使用嵌套的if語句,在這種情形下應用多個if語句來判斷各種可能。不要使用if嵌套超過五級深度。應使代碼編寫得更加清晰、明了。不要在if語句中使用不必要的圓括號。如果在if語句中有多
17、個條件需測試,這些條件應按計算強度由少到多的順序從左到右排列。這樣做能使編譯器在編譯代碼時獲得布爾估算邏輯的捷徑,從而使你的代碼獲得最佳的優(yōu)化。舉例來說,如果條件1快過條件2,而條件2快過條件3,那么在if語句中的排列應是: if 條件1 and 條件2 and 條件3 then3.6.2 case 語句 一般性話題在一個case語句中的各個獨立的單元應以數(shù)字或字母順序排列。每一個case單元的動作行為應保持簡單而不應該超過四到五行代碼。如果所要執(zhí)行的動作過于復雜應采用獨立的過程或函數(shù)。Case語句中的else子句只有當需要缺省行為或處理錯誤時才使用。 格式case
18、語句應遵循其它結構的縮格和命名約定。3.6.3 while 語句在一個while語句中不建議使用exit過程來跳出循環(huán),盡量僅使用循環(huán)條件來跳出循環(huán)。在一個while循環(huán)中所用的初始化代碼應緊靠在進入while循環(huán)前面出現(xiàn)而不要被其它不相關的語句隔開。任何結束后的處理應在循環(huán)之后立即進行。3.6.4 for 語句for語句只有當循環(huán)次數(shù)已知的情況下才能取代while語句使用。3.6.5 repeat 語句repeat語句的使用同while語句一樣,并且遵循同樣的通用方針。3.6.6 with 語句 一般話題with語句應節(jié)省使用,并且?guī)в写罅康木妗1苊膺^度使用with語句并且在
19、with語句中小心使用多個對象、記錄等等。例如: with Record1, Record2 do這些事情會使程序員感到困惑并難以發(fā)現(xiàn)問題所在。 格式with 語句遵循本文檔所說明的命名約定和縮格的格式規(guī)則。3.7 結構異常處理3.7.1 一般話題異常的處理大量地使用在錯誤糾正和資源保護方面。這就是說一旦資源被分配,一個try.finally必需加以使用來保證該資源被正確的釋放。這種異常的保護也是指在一個單元的initializition/finalization或一個對象的constructor/destructor中進行資源的分配和釋放。3.7.2 try.finally的使
20、用任何情形下,每一次的分配都應跟隨一個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 SomeClas
21、s2.Free; end; finally SomeClass1.Free; end;3.7.3 try.except的使用只有當在異常被觸發(fā)而你想執(zhí)行一些任務時才使用try.except。通常,你沒有必要為了只是簡單地在屏幕上顯示一個錯誤信息而使用try.except語句,因為這會被Application對象自動執(zhí)行。如果你想在except子句中執(zhí)行完一些任務之后調(diào)用缺省的異常處理,使用raise來重新觸發(fā)異常到下一個句柄。3.7.4 try.except.else的使用try.except中的else子句不建議使用,因為它會打斷所有的異常包括那些你沒有準備的異常。3.8 類類型3.8.1
22、命名和格式類類型的名稱應符合使用它們的目的。類型名字應加以前綴T以表明這是一個類型的定義 例如:type Tcustomer = class(TObject)類型的實例通常是沒有前綴T的類型的名字 例如:var Customer :Tcustomer;注意:查閱“構件類型的命名標準”來獲得更多有關構件命名的信息。3.8.2 域 命名/格式類的域名遵循與變量標識符同樣的約定除了它們應以F為前綴,來表明這是一個域的名稱。 可視化所有的域都必需是私有的。想在類的范圍之外存取域得通過屬性來使用。3.8.3 方法 命名/格式方法的命名應遵循本文檔中有關過程和函數(shù)
23、的約定敘述。 使用靜態(tài)的方法如果使用一個靜態(tài)的方法,那么該方法就不能被該類的后代類所繼承。 使用虛擬/動態(tài)的方法如果你打算該類的方法能被后代的類所繼承就得使用虛擬的方法。只有在該方法有多個繼承時(直接的或間接的)才使用動態(tài)的方法。例如,一個類類型包含一個可繼承的方法,而100個后代類要繼承這種方法,那么這個方法就會動態(tài)地產(chǎn)生為100個后代類使用的內(nèi)存。 使用抽象的方法如果在一個類中使用抽象的方法,該類就不能被創(chuàng)建。只有在那些永遠不會被創(chuàng)建的類中使用抽象的方法。 屬性存取方法所有存取類的方法都只能出現(xiàn)在類的private或protected
24、部分。屬性存取方法的命名應遵循過程和函數(shù)的約定規(guī)則。讀取存取方法(方法讀取器)必需以單詞Get為前綴。寫入存取方法(方法寫入器)必需以單詞Set為前綴。方法寫入器的參數(shù)的名字應為Value,并且它的類型應是它所操作的屬性的類型。例如: TSomeClass = class(TObject) private FsomeField : Integer; protected function GetSomeField : Integer; procedure SetSomeField(Value : Integer); public property SomeField : Integer read
25、 GetSomeField write SetSomeField; end;3.8.4 屬性 命名/格式屬性如果是表示為一個私有域的存取器的話,那么它的名字應是它們所操作的域的名字除去解釋符F。屬性的名字應是名詞,不是動詞。屬性表示的是數(shù)據(jù),而方法表示的是行為。數(shù)組類型的名稱應為復數(shù)。一般情況下屬性的名稱應為單數(shù)。 使用存取的方法盡管沒有要求,但還是建議盡量少地為一個表示私有域的屬性而使用寫入存取方法。四、文件4.1 工程文件4.1.1 命名工程文件應取個描述性的名字。例如,Delphi 4開發(fā)者指南錯誤管理器 的工程名字是:DDGBugs.dpr。一個有關系統(tǒng)信息
26、的程序的名字就應象 SysInfo.dpr。4.2 窗體文件4.2.1 命名一個窗體文件的取名應可以描述使用該窗體的目的,并加以后綴Frm。例如,一個“關于”的窗體的文件名應是AboutFrm.dpr。主窗體的文件名應是MainFrm.dpr。4.3 數(shù)據(jù)模板文件4.3.1 命名數(shù)據(jù)模板的取名應能表示使用該數(shù)據(jù)模板的目的,它的名稱應加以兩個字符的后綴DM。例如,自定義數(shù)據(jù)模板的文件名字應為CustomersDM.dfm。4.4 遠端數(shù)據(jù)模板文件4.4.1 命名遠端數(shù)據(jù)模板的取名應能表示使用該遠端數(shù)據(jù)模板的目的,它的名稱應加以三個字符的后綴RDM。例如,自定義遠端數(shù)據(jù)模板的文件名字應為Custo
27、mersRDM.dfm。4.5 Unit文件4.5.1 通用Unit結構 unit的名字Unit文件應取一個可描述性的名字。例如,包含應用程序主窗體的單元應叫做MainFrm.pas。 uses子句在interface部分的uses子句應包含在interface部分中的代碼所需要的單元。去掉那些Delphi可以自動加入到程序中的單元。在implementation部分的uses子句應只包含在implementation部分中的代碼所需要的單元的名字。去掉不必要的單元。 interface部分interface部分應包含只那些其它單元所需要存取類型的定義
28、、變量、過程/函數(shù)的預定義等等。否則,就應放在implementation部分定義。 implementation部分implementation部分應包含那些只在本單元中私用的類型定義、變量、過程/函數(shù)定義等等。 initialization部分不要在initialization 部分放入耗時長的代碼,這將使程序的第一個界面出現(xiàn)得比較緩慢。 finalization部分在這里要保證釋放你在Initialization部分所分配的任何資源。4.5.2 窗體單元 命名一個窗體的單元文件應擁有與它所對應的窗體文件同樣的名稱。例如,“關于”窗體
29、的單元名稱應為 AboutFrm.pas,而主窗體的單元名稱應為MainFrm.pas。4.5.3 數(shù)據(jù)模板單元 命名一個數(shù)據(jù)模板的單元文件應擁有與它所對應的數(shù)據(jù)模板文件同樣的名稱。例如,一個自定義數(shù)據(jù)模板單元的名稱應為CustomersDM.pas。4.5.4 一般目的單元 命名一般目的單元的取名應符合使用該單元的目的。例如,一個實用程序單元取名為BugUtilities.pas。一個包含全局變量的單元取名為CustomerGlobals.pas。注意,該單元的名字不能與它的工程中所使用的所有包中的單元的名字相同。不贊成使用一般的或通用的單元名字。4.5.5 構件
30、單元 命名構件單元應放在獨立的目錄,以將它們同定義構件組或構件集合的單元區(qū)分開來。它們要永遠同工程在不同的目錄。單元名字應同它們的內(nèi)容相符。注意:查閱“用戶定義的構件”部分來獲得更多有關構件命名標準的信息。4.6 文件頭建議在所有源文件、工程文件、單元等等中使用信息化文件頭。一個良好的文件頭應包含以下信息: 版權. 著作的年、月、日.五、窗體和數(shù)據(jù)模板5.1 窗體5.1.1 窗體類型命名標準窗體類型的取名應能表達使用該窗體的目的。類型定義應加以前綴T。前綴后面跟隨著描述性的名字。最后,應加以Form后綴來描述名字。例如,一個“關于”的窗體的類型的名字應為: TAboutFrom
31、= class(TForm);主窗體的定義為: TMainForm = class(TForm);一個用戶接入窗體的名字應象: TCustomerEntryForm = class(TForm);5.1.2 窗體實例命名標準窗體實例應是沒有帶前綴T的相應類的名字。例如,對應于前面窗體類型而言,其實例的名字應為: 類型名稱 實例名稱 TAboutForm AboutForm TMainForm MainForm TCustomerEntryForm CustomerEntryForm5.1.3 自動創(chuàng)建窗體只有主窗體可以是自動創(chuàng)建的除非有其它更好的理由不這樣做。所有其它的窗體必需從工程選項對話框
32、中的自動創(chuàng)建列表中移走。查閱以下部分來獲得更多的信息。5.1.4 模式窗體實例化函數(shù)所有的窗體單元都應包含一個窗體實例化函數(shù),該函數(shù)用來創(chuàng)建、設置、模式地顯示窗體,并釋放窗體。該函數(shù)應返回窗體的模式結果。該函數(shù)要傳遞的參數(shù)應遵循本文檔指定的“參數(shù)傳遞”標準。通過這種方式封裝的函數(shù)性有助于代碼的再利用和維護。該窗體的變量要從單元中移走,并再窗體實例的函數(shù)中進行本地式地定義。注意,這就意味著該窗體必需從工程/選項對話框中的自動創(chuàng)建列表中剔除。參考本文檔后面的“自動創(chuàng)建窗體”。例如,下面的單元展示了再GetUserData窗體中的一個函數(shù)。 unit UserDataFrm; interface u
33、seswindows, 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 : Integer) : Word; imp
34、lementation $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 = mrOK) then begin a
35、UserName := UserDataForm.edtUserName.Text; aUserID := StrToInt(UserDataForm.edtUserID.Text); end; finally UserDataForm.Free; end; end; end.5.2 數(shù)據(jù)模板5.2.1 數(shù)據(jù)模板命名標準數(shù)據(jù)模板的取名要符合使用該數(shù)據(jù)模板的目的。類型的定義應加以前綴T,后面緊接著描述性的名字,最后要加以后綴單詞“DataModule”。例如,一個自定義的數(shù)據(jù)模板有時候應該象: TCustomerDataModule = class(TDataModule)一個命令式的數(shù)據(jù)模板的
36、名字應象: TOrdersDataModule = class(TDataModule)5.2.2 數(shù)據(jù)模板實例命名標準數(shù)據(jù)模板實例的名稱應是對應不帶前綴T的類型的名稱。例如,對于前面的窗體類型而言,其實例的名稱應為: 類型名稱 實例名稱 TCustomerDataModule CustomerDataModule TOrdersDataModule OrdersDataModule六、包6.1 使用運行包和設計包的比較運行時刻的包應只包含其它構件包所要求的單元或構件。另外,包含屬性/構件編輯器和其它只為設計的代碼應放入到設計時刻包中。注冊單元應放在設計包中。6.2 文件命名標準包的名稱應依照
37、下面的例子:“iiilibvv.pkg” 設計時刻包“iiistdvv.pkg” 運行時刻包字符“iii”表示一個3字符標識前綴。這個前綴用來表明公司、個人或其它有標識意義的實體。字符“vv”表示為該包想要對應Delphi某個版本的包的版本號。注意,包的名字中包含“l(fā)ib”或“std”的意思是表明這是一個設計時刻包還是一個運行時刻包。如果既是設計時刻包又是運行時刻包,該文件的命名是同上面一樣的,例如,為Delphi 4開發(fā)者指南做的包的名稱應為:DdgLib40.pkg - 設計時刻包DdgStd40.pkg - 運行時刻包七、構件7.1 用戶自定義構件在標準構件中命名出來的構件的名稱同在“類
38、類型”部分定義中的一樣定義成一個類類型,不同的是它們有一個3字符的指示前綴,這個前綴可以表示公司、個人或其它實體。例如,一個為Delphi 4開發(fā)者指南編寫的時鐘構件的名稱定義為: TddgClock = class(TComponent)注意,那三個前綴字符是小寫的。7.2 構件單元構件單元應只包含一個主要的構件,一個主要的構件是指出現(xiàn)在構件欄中的構件。主要構件的輔助構件/對象應放入到同一個單元中。7.3 使用注冊單元構件的注冊過程應從構件本身的單元中剔除,并放入到一個獨立的單元中。這個注冊單元可以用來注冊任何構件、屬性編輯器、構件編輯器、專家器等。構件的注冊只應在設計時刻包中進行,注冊單元
39、應包含在設計時刻包中而不應放在運行時刻包中。推薦使用的注冊單元的名稱是:XxxReg.pas上面的3個前綴字符“Xxx”用來表示一個公司、個人或任何其它的實體。例如,在Delphi 4 開發(fā)者指南中的注冊單元的名稱應為 DdgReg.pas。7.4 構件實例命名約定所有的構件都應取個描述性的名稱。由Delphi創(chuàng)建的缺省名的構件不會被遺棄。在設計構件類型時應設計一個小寫的前綴。使用前綴而不使用后綴的原因是在搜尋時,在對象檢查器和代碼探索器中搜尋構件的名字比搜尋構件的類型更容易實現(xiàn)。附錄匈牙利命名法(Hungarian-Notation):據(jù)說這種命名法是一位叫 Charles Simonyi
40、的匈牙利程序員發(fā)明的,后來他在微軟呆了幾年,于是這種命名法就通過微軟的各種產(chǎn)品和文檔資料向世界傳播開了?,F(xiàn)在,大部分程序員不管自己使用什么軟件進行開發(fā),或多或少都使用了這種命名法。這種命名法的出發(fā)點是把量名變按:屬性+類型+對象 描述的順序組合起來,以使程序員操作變量時對變量的類型和其它屬性有直觀的了解,下面是HN變量命名規(guī)范:屬性部分 全局變量 g_ 常量 c_ c+類成員變量 m_ 靜態(tài)變量 s_ 類型部分 指針 p 函數(shù) fn 無效 v 句柄 h 長整型 l 布爾 b 浮點型(有時也指文件) f 雙字 dw 字符串 sz 短整型 n 雙精度浮點 d 計數(shù) c(通常用cnt) 字符 ch(通常用c) 整型 i(通常用n) 字節(jié) by 字 w 實型 r 無符號 u 描述部分 最大 Max 最小 Min 初始化 In
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 河南開封高三數(shù)學試卷
- 國外高一數(shù)學試卷
- 2025合同保證書格式范本 保證書寫
- 2025年北京市房地產(chǎn)購買合同范本
- 河西區(qū)二模初三數(shù)學試卷
- 快速施工技術應用-洞察及研究
- 湖北省黃岡中考數(shù)學試卷
- 交互設計原則-洞察及研究
- 感官評價方法優(yōu)化-洞察及研究
- 國外小學數(shù)學試卷
- 2025年廣東高考政治試卷真題答案詳解講評(課件)
- 卡口及道路交通智能監(jiān)控系統(tǒng)方案設計
- 2025年家庭照護師職業(yè)資格考試試題及答案
- 呼吸機相關性肺炎的預防和護理
- 2025年綏化市中考化學試題卷(含答案解析)
- 門診口腔院感基礎知識培訓
- 論詠嘆調(diào)《媽媽不在》的形象刻畫與唱段處理
- 危重病人觀察和護理要點
- 砌體工程培訓課件
- GB/T 45719-2025半導體器件金屬氧化物半導體(MOS)晶體管的熱載流子試驗
- 2025-2030中國醫(yī)藥商業(yè)行業(yè)盈利態(tài)勢與投資潛力分析報告
評論
0/150
提交評論