Delphi編碼標準——過程和函式 (轉)
過程和:namespace prefix = o ns = "urn:schemas--com::office" />
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 (APl, AContinent, ACountry, AState, ACity).
有些則例外。
例如:
在事件處理過程中,T型別的Sender引數往往是第一個要傳遞的引數。
(4) 常量引數:要使記錄、陣列、短字串或介面型別的引數不能被例程修改,就應當把形參標以Const。這樣,將以最有效的方式生成程式碼,保證傳遞的引數不可變。
如果其他型別的引數希望不被例程所修改,也可以標上C o n s t。儘管這對沒有影響,但這給例程的呼叫者帶來了更多的資訊。
(5) 命名衝突:當兩個單元中含有相同名稱的例程時,如果呼叫該例程,實際被呼叫的是Uses 子句中較後出現的那個單元中的例程。為避免這種情況,可在方法名前加想要的單元名,
例如:
SysUtils.FindClose (SR);
.FindClose(Handle);
3.變數
(1) 變數的命名與格式:變數的名稱應當能夠表達出它的用途。
迴圈控制變數常常為單個字母,諸如I、J或K。也可以使用更有意義的名稱,例如UserIndex;
布林變數名必須能清楚表示出True和False值的意義。
(2) 區域性變數:區域性變數用於例程內部,遵循其他變數的命名規則。如果需要的話,應當在例程的入口處立即初始化變數。
區域性的AnsiString型別的變數自動被初始化為空字串;
區域性的介面和dispinterface型別的變數自動被初始化為nil;
區域性的Variant和OleVariant型別的變數自動被初始化為Unassigned。
(3) 全域性變數:一般不鼓勵使用全域性變數。不過,有時候需要用到。即使如此,也應當把全域性變數限制在需要的環境中。
全域性變數可能只在單元的實現部分是全域性的;
全域性資料如果將由許多單元使用,就應移動到一個公用單元裡被所有使用;
全域性資料可在宣告時直接初始化為一個值。
(注意,所有全域性變數自動進行零初始化,因此,不要將全域性變數初始化為諸如0、nil、或Unassigned等空值。零初始化的全域性變數在. EXE中不佔空間。零初始化的資料儲存在虛擬的資料段中,而虛擬資料段只在應用啟動時才分配。非零初始化的全域性資料則在. E X E檔案中佔空間。)
4.型別
(1) 大小寫規則:型別識別符號是保留字,應當全部小寫。 型別常常全部大寫,並且遵循諸如Windows.pas或其他API單元中關於特定型別名的規則。對於其他變數名,第一個字母應大寫,其他字母則大小寫交錯。
例如:
var
MyString: string; // 保留字
WindowsHandle: HWND; // Win32 API 型別
I: Integer; //在S y s t e m單元中引入的型別標識
(2)浮點型:不鼓勵使用Real型別,因為它只是為了與老的Pascal程式碼相容而保留的。通常情況下,對於浮點數應當使用Double。Double可被,是IEEE定義的標準的資料格式。當需要比Double提供的範圍更大時,可以使用Extend。Extend是專用的型別,不支援。當浮點變數的物理位元組數很重要時(可能使用其他語言編寫DLL ),則應當使用Single。
(3) 列舉型:列舉型別名必須代表列舉的用途。名稱前要加T字元作為字首,表示這是個資料型別。列舉型別的識別符號列表的字首應包含2 ~ 3個小寫字元,來彼此關聯。
例如:
TSongType = (stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB);
列舉型別的變數例項的名稱與型別相同,但沒有字首T,也可以給變數一個更加特殊名稱,諸如:FavoriteSongTpe1、FavoriteSongTpe2等等。
(4)Variant和OleVariant:
一般不建議使用Variant和OleVariant。但是,當資料型別只有在執行期才知道時(常常是在COM和應用的程式中),這兩個型別對就有必要。當進行諸如自動化的COM程式設計時,應當使用OleVariant;而對於非COM程式設計,則應當使用Variant。這是因為, Variant能夠有效地儲存的原生字串,而OleVariant則將所有字串轉換為OLE字串(即W Char字串),且沒有引用計數功能。
5.構造型別
(1) 陣列型別:陣列型別名應表達出該陣列的用途。型別名必須加字母T為字首。如果要宣告一個指向陣列型別的指標,則必須加字母P為字首,且宣告在型別宣告之前。
例如:
type
PCycleArray = ^TCycleArray;
TCycleArray=array [1..100] of integer;
實際上,陣列型別的變數例項與型別名稱相同,但沒有T字首。
(2)記錄型別:記錄型別名應表達出記錄的用途。型別名必須加字母T為字首。如果要宣告一個指向記錄型別的指計,則必須加字母P為字首,且其宣告在型別宣告之前。
例如:
type
PStudent = ^ TStudent;
TStudent = record
StudentName: string;
StudentAge: Double;
6.類
(1) 命名與格式
類的名稱應當表達出類的用途。類名前要加字母T,表示它是一個型別。
例如:
type
TStudent= class (TObject);
類的例項名稱與類名相同,只不過沒有字首T。
var
Student: TStudent;
注意關於的命名,請參閱6.6節“元件”。
(2) 欄位
命名與格式:欄位的命名遵循與變數相同的規則,只不過要加字首F,表示這是欄位。
可見性:所有欄位必須為私有。如果要在類的作用域之外訪問欄位,可藉助於類的屬性來實現。
(3) 方法
命名與格式:方法的命名遵循與過程和函式相同的規則。
靜態方法:當你不希望一個方法被派生類覆蓋時,應當使用靜態方法。
虛擬方法與動態方法:當你希望一個方法能被派生類覆蓋,應當使用虛擬方法。如果類的方法要被多個派生類直接或間接地使用,則應當用動態方法。
例如:某一個類含有一個被頻繁覆蓋的方法,並有100個派生類,則應將方法定義為動態的,這樣可以減少記憶體的開銷。
抽象方法:如果一個類要建立例項,則不要使用抽象方法。抽象方法只能在那些從不建立例項的基類中使用。
屬性訪問方法:所有屬性訪問方法應當定義在類的私有或保護部分。屬性訪問方法遵循與過程和函式相同的規則。用於讀的方法應當加G e t字首,用於寫的方法應當加Set字首,並且有一個叫Value的引數,其型別與屬性的型別相同。
例如:
TStudent = class (TObject)
private
FName: string;
protected
function GetName: string;
procedure SetName (Value: string);
public
property Name: string read GetName write SetName;
end;
(4) 屬性
屬性作為私有欄位的訪問器,遵循與欄位相同的命名規則,只不過沒有F字首。屬性名應為名詞,而不是動詞。屬性是資料,而方法是動作。陣列屬性名應當是複數,而一般的屬性應當是單數。
(5) 訪問方法的使用
儘管不是必須,但還是建議你使用寫訪問方法來訪問代表私有欄位屬性。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-998878/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Presto 標量函式註冊和呼叫過程簡述REST函式
- 小視訊app開發過程中的兩種編碼標準APP
- MySQL 儲存過程和函式MySql儲存過程函式
- MySQL儲存過程和函式MySql儲存過程函式
- 指標函式 和 函式指標指標函式
- 道德標準的形成過程
- Hive函式(內建函式+自定義標準函式UDF)Hive函式
- 標準IO常用函式介面函式
- 3個重點,20個函式分析,淺析FFmpeg轉碼過程函式
- [譯]精通Kotlin標準函式:run、with、let、also和applyKotlin函式APP
- base64編碼原理和函式函式
- mysql和orcale的儲存過程和儲存函式MySql儲存過程儲存函式
- 函式棧幀(呼叫過程)函式
- 標準差excel用什麼函式 excel標準偏差的公式Excel函式公式
- apolloxlua標準庫require函式說明UI函式
- C++11 標準庫 bind 函式C++函式
- day25-索引和函式及儲存過程索引函式儲存過程
- [C++] 成員函式指標和函式指標C++函式指標
- MySQL過程和遊標MySql
- MySQL優化---儲存過程和儲存函式-1-轉自部落格園MySql優化儲存過程儲存函式
- 為複合函式和反函式做好準備函式
- MySQL儲存過程 (即函式)MySql儲存過程函式
- mySql 儲存過程與函式MySql儲存過程函式
- SQL server儲存過程函式SQLServer儲存過程函式
- 掌握Kotlin標準函式:run, with, let, also and applyKotlin函式APP
- MySQL使用之五_自定義函式和自定義過程MySql函式
- [譯]掌握Kotlin中的標準庫函式: run、with、let、also和applyKotlin函式APP
- [轉]:xmake編譯配置過程詳解編譯
- openGauss 函式及儲存過程支援函式儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- 儲存過程vs.函式QM儲存過程函式
- js函式執行過程的探究JS函式
- [20190118]toad下如何除錯儲存過程和函式.txt除錯儲存過程函式
- MySQL入門--儲存過程(PROCEDURE)和儲存函式(FUNCTION)MySql儲存過程儲存函式Function
- ES6標準 Arrow Function(箭頭函式=>)Function函式
- Go語言標準庫time之日期和時間相關函式Go函式
- 如何使用函式指標呼叫類中的函式和普通函式函式指標
- 阿里開源COLA 4.0原始碼編譯和部署過程阿里原始碼編譯
- PostgreSQL 原始碼解讀(134)- MVCC#18(vacuum過程-HeapTupleSatisfiesVacuum函式)SQL原始碼MVCC#APT函式