過程與函數1. 命名與格式(1)過程名應以大寫字母開始,且大小寫交錯以增加可讀性。以下是一個不正確的寫法:PRocedure thisisapoorlyformattedroutinename;改成這樣寫就對了:procedure ThisIsMuchMoreReadableRoutineName;(2)過程名稱應該有意義。進行一個動作的例程最好在名稱前加上表示動作的動詞為前綴。例如:procedure FormatHardDrive;設定輸入參數值的例程名稱應以Set為其前綴,例如:procedure SetUserName;取得數值的例程名稱應以Get為其前綴,例如:function GetUserName: string;2. 形參( 1) 格式:只要可能,同一類型的形參應當歸並在一起。例如:procedure ProcedureName (Param1, Param2, Param3: Integer; Param4: string);(2) 命名:所有形參的名稱都應當表達出它的用途。如果適當的話,形參的名稱最好以字母A為前綴。例如: procedure ProcedureName (AUserName: string; AUserAge: integer);當參數名稱與類別的特性或欄位同名時,前綴A就有必要了。 (3) 參數順序:形參的順序主要要考慮暫存器呼叫規則。最常用的參數應作為第一個參數,並依使用頻率依序由左至右排。輸入參數位於輸出參數之前。範圍大的參數應放在範圍小的參數之前。例如:procedure ProcedureName (APlanet, AContinent, ACountry, AState, ACity).有些則例外。例如:在事件處理過程中,TObject類型的Sender參數往往是第一個要傳遞的參數。 (4) 常數參數:要使記錄、陣列、短字串或介面類型的參數不能被例程修改,就應把形參標以Const。這樣,編譯器將以最有效的方式產生程式碼,確保傳遞的參數不可變。如果其他類型的參數希望不被例程所修改,也可以標上C onst。儘管這對效率沒有影響,但這給例程的呼叫者帶來了更多的資訊。 (5) 命名衝突:當兩個單元中含有相同名稱的例程時,如果呼叫例程,實際被呼叫的是Uses 子句中較後出現的那個單元中的例程。為避免這種情況,可在方法名稱前加上想要的單元名,例如:SysUtils.FindClose (SR);Windows.FindClose(Handle);3.變數(1) 變數的命名與格式:變數的名稱應當能夠表示出它的用途。循環控制變數常為單一字母,諸如I、J或K。也可以使用更有意義的名稱,例如UserIndex;布林變數名必須能清楚表示出True和False值的意義。 (2) 局部變數:局部變數用於例程內部,遵循其他變數的命名規則。如果需要的話,應在例程的入口處立即初始化變數。局部的AnsiString類型的變數會自動被初始化為空字串;局部的介面和dispinterface類型的變數自動被初始化為nil;局部的Variant和OleVariant類型的變數自動被初始化為Unassigned。 (3) 全域變數:一般不鼓勵使用全域變數。不過,有時候需要用。即使如此,也應把全域變數限制在需要的環境中。全域變數可能只在單元的實作部分是全域的;全域資料如果將由許多單元使用,就應移動到一個公用單元裡被所有物件使用;全域資料可在宣告時直接初始化為一個值。 (注意,所有全域變數自動進行零初始化,因此,不要將全域變數初始化為諸如0、nil、或Unassigned等空值。零初始化的全域變數在. EXE檔案中不佔空間。零初始化的資料保存在在虛擬的資料段中,而虛擬資料段只在應用程式啟動時才分配記憶體。類型(1) 大小寫規則:類型標識符是保留字,應全部小寫。 Win32 API類型常常全部大寫,並且遵循諸如Windows.pas或其他API單元中關於特定類型名稱的規則。其他變數名,第一個字母應大寫,其他字母則大小寫交錯。例如:varMyString: string; // 保留字WindowsHandle: HWND; // Win32 API 類型I: Integer; //在S ystem單元中引入的類型標識(2)浮點型:不鼓勵使用Real類型,因為它只是為了與舊的Pascal程式碼相容而保留的。通常情況下,對於浮點數應使用Double。 Double可被處理器最佳化,是IEEE定義的標準的資料格式。當需要比Double提供的範圍更大時,可以使用Extend。 Extend是Intel專用的類型,java不支援。當浮點數變數的物理位元組數很重要時(可能使用其他語言編寫DLL ),則應使用Single。 (3) 枚舉型:枚舉型別名稱必須代表枚舉的用途。名稱前要加T字元作為前綴,表示這是個資料型態。枚舉類型的標識符列表的前綴應包含2 ~ 3個小寫字符,並彼此關聯。例如:TSongType = (stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB);枚舉類型的變數實例的名稱與型別相同,但沒有前綴T,也可以給變數一個更特殊名稱,諸如:FavoriteSongTpe1、FavoriteSongTpe2等等。 (4)Variant和OleVariant:一般不建議使用Variant和OleVariant。但是,當資料類型只有在運行期才知道時(常常是在COM和資料庫應用的程式中),這兩個類型對程式設計就有必要。當進行諸如自動化ActiveX控件的COM編程時,應使用OleVariant;而對於非COM編程,則應使用Variant。這是因為, Variant能夠有效地保存Delphi的原生字串,而OleVariant則將所有字串轉換為OLE字串(即Wide Char字串),且沒有引用計數函數。 5.構造類型(1) 數組類型:數組類型名應表達出該數組的用途。類型名必須加上字母T為前綴。如果要聲明一個指向數組類型的指針,則必須加字母P為前綴,且聲明在類型聲明之前。例如:typePCycleArray = ^TCycleArray;TCycleArray=array [1..100] of integer;實際上,陣列類型的變數實例與型別名稱相同,但沒有T前綴。 (2)記錄類型:記錄類型名應表達記錄的用途。類型名必須加上字母T為前綴。如果要宣告一個指向記錄類型的指計,則必須加字母P為前綴,且其宣告在類型宣告之前。例如:typePStudent = ^ TStudent;TStudent = recordStudentName: string;StudentAge: Double;6.類別(1) 命名與格式類別的名稱應當表達出類別的用途。類別名稱前要加字母T,表示它是一個型別。例如:typeTStudent= class (TObject);類別的實例名稱與類別名稱相同,只不過沒有前綴T。 varStudent: TStudent;注意關於組件的命名,請參閱6.6節「組件」。 (2) 欄位命名與格式:欄位的命名遵循與變數相同的規則,只不過要加前綴F,表示這是欄位。可見性:所有欄位必須為私有。如果要在類別的作用域之外存取字段,可藉助於類別的屬性來實現。 (3) 方法命名與格式:方法的命名遵循與流程和函數相同的規則。靜態方法:當你不希望一個方法被衍生類別覆寫時,應使用靜態方法。虛擬方法與動態方法:當你希望一個方法能被衍生類別覆蓋,就應該使用虛擬方法。如果類別的方法要被多個衍生類別直接或間接地使用,則應使用動態方法。例如:某一個類別含有一個被頻繁覆蓋的方法,並有100個派生類,則應將方法定義為動態的,這樣可以減少記憶體的開銷。抽象方法:如果一個類別要建立實例,則不要使用抽象方法。抽象方法只能在那些從不建立實例的基底類別中使用。屬性存取方法:所有屬性存取方法應定義在類別的私有或保護部分。屬性存取方法遵循與過程和函數相同的規則。用於讀取的方法應加上G et前綴,用於寫入的方法應加上Set前綴,並且有一個叫Value的參數,其類型與屬性的類型相同。例如:TStudent = class (TObject)privateFName: string;protectedfunction GetName: string;procedure SetName (Value: string);publicproperty Name: string read GetName write SetName;end;(4) 屬性屬性作為私有字段的訪問器,遵循與字段相同的命名規則,只不過沒有F前綴。屬性名應為名詞,而不是動詞。屬性是數據,而方法是動作。數組屬性名應為複數,而一般的屬性應為單數。 (5) 存取方法的使用儘管不是必須,但還是建議你使用寫入存取方法來存取代表私有欄位屬性。