当前位置:编程学习 > Delphi >>

初学者该如何书写Delphi源程序格式(一)

1,规范简介

本规范主要规定Delphi源程序在书写过程中所应遵循的规则及注意事项。编写该规范的目的是使公司软件开发人员的源代码书写习惯保持一致。这样做可以使每一个组员都可以理解其它组员的代码,以便于源代码的二次开发记忆系统的维护。

2,一般格式规范

2.1 缩进

缩进就是在当源程序的级改变时为增加可读性而露出的两个空格。缩进的规则为每一级缩进两个空格。不准许使用Tab。因为Tab会因为用户所作的设置不同而产生不同的效果。当遇到begin 或进入判断、循环、异常处理、with语句、记录类型声明、类声明等的时侯增加一级, 当遇到end或退出判断、循环、异常处理、with语句、记录类型声明、类声明等的时侯减少一级。例如:

if TmpInt <> 100 then
TmpInt := 100;

2.2 Begin..End

begin语句和end语句在源程序中要独占一行,例如:
for I := 0 to 10 do begin //不正确的用法
end;
for I := 0 to 10 do //正确的用法
begin
end;

2.3 空格

在操作符及逻辑判断符号的两端添加空格,例如:I := I + 1;,a and b 等,但添加括号时不需要空格。例如:if ( a > b ) then //错误的用法
If (a > b) then //正确的用法
又例如:procedure Test(Param1: integer; Param3: string);

3. Object Pascal 语法书写格式规范

3.1 保留字

Object Pascal 语言的保留字或关键词应全部使用小写字母。


3.2 过程和函数

3.2.1命名及格式

过程和函数的名称应全部使用有意义的单词组成,并且所有单词的第一个字母应该使用大写字母。例如:
procedure formatharddisk;//不正确的命名
procedure FormatHardDisk;//正确的命名

设置变量内容的过程和函数,应使用Set作为前缀,例如: procedure SetUserName;

读取变量内容的过程和函数,应使用Get作为前缀,例如:function GetUserName: string;

3.2.2 过程和函数的参数

3.2.2.1命名

统一类型的参数写在同一句中: procedure Foo(Param1, Param2, Param3: Integer; Param4: string);

3.2.2.2命名

所有参数必须是有意义的;并且当参数名称和其它属性名称重了的时候,加一个前缀‘A’, 例如:
procedure SomeProc(AUserName: string; AUserAge: integer);

3.2.2.3命名冲突

当使用的两个unit中包括一个重名的函数或过程时, 那幺当你引用这一函数或过程时,将执行在use 子句中后声明的那个unit中的函数或过程。为了避免这种‘uses-clause-dependent’需要在引用函数或过程时,写完整函数或过程的出处。例如:

SysUtils.FindClose(SR);
Windows.FindClose(Handle);

3.3 变量

3.3.1 变量命名及格式

首先所有变量必须起有意义的名字,使其它组员可以很容易读懂变量所代表的意义,变量命名可以采用同义的英文命名,可使用几个英文单词,但每一单词的首字母必须大写。例如: var WriteFormat::string;

同时对于一些特定类型可采用一定的简写如下:

指针类型 P
纪录类型 Rec
数组类型 Arr
类 Class

循环控制变量通常使用单一的字符如:i, j, 或 k。 另外使用一个有意义的名字例如:UserIndex ,也是准许的。

3.3.2 局部变量

在过程中使用局部变量遵循所有其它变量的命名规则。

3.3.3 全局变量

尽量不使用全局变量,如必须使用全局变量则必须加前缀‘g’,同时应在变量名称中体现变量的类型。例如:
gprecUserCount: point;//名称为UserCount的全局变量,其类型为指向一结构的指针但是在模块内部可以使用全局变量。所有模块内全局变量必须用‘F’为前缀。如果几个模块之间需要进行资料交换,则需要通过声明属性的方法来实现。例如:

type
TFormOverdraftReturn = class(TForm)
private
{ Private declarations }
FuserName: string;
FuserCount: Integer;
Procedure SetUserName(Value: string);
Function GetUserName: string;
public
{ Public declarations }
property UserName: string read GetUserName write SetUserName;
property UserCount: Integer read FuserCount write FuserCount;
end;

3.4 类型

3.4.1 大小写协议

保留字的类型名称必须全部小写。Win32 API 的类型通常全部大写,对于其它类型则首字母大写,其余字母小写,例如:

var
MyString: string; // reserved word
WindowHandle: HWND; // Win32 API type
I: Integer; // type identifier introduced in System unit

3.4.2 浮点类型

尽量不使用 Real 类型,他只是为了和旧的Pascal代码兼容,尽量使用Double 类型。Double 类型是对处理器和数据总线做过最优化的并且是IEEE定义的标准数据结构。当数值超出Double的范围时,使用Extended 。但Extended不被Jave支持。但使用其它语言编写的DLL时可能会使用Single 类型。

3.4.3 枚举类型

枚举类型的名字必须有意义并且类型的名字之前要加前缀‘T’。枚举类型的内容的名字必须包含枚举类型名称的简写,例如:

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

3.4.4 数组类型

数组类型的名字必须有意义并且类型的名字之前要加前缀‘T’。如果声明一个指向数组类型的指针必须在该类型的名字之前加前缀‘P’,例如:

type
PCycleArray = ^TCycleArray;
TCycleArray = array[1..100] of integer;

3.4.5记录类型

记录类型的名字必须有意义并且类型的名字之前要加前缀‘T’。如果声明一个指向数组类型的指针必须在该类型的名字之前加前缀‘P’,例如:

type
PEmployee = ^TEmployee;
TEmployee = record
EmployeeName: string
EmployeeRate: Double;
end;


3.5 类

3.5.1 命名及格式

类的名字必须有意义并且类型的名字之前要加前缀‘T’。例如:

type
TCustomer = class(TObject)

类实例的名字通常是去掉‘T’的类的名字。例如:

var
Customer: TCustomer;

3.5.2 类中的变量

3.5.2.1命名及格式

类的名字必须有意义并且类型的名字之前要加前缀‘F’。所有的变量必须是四有的。如果需要从外部访问此变量则需要声明一属性

3.5.3 方法

3.5.3.1命名及格式

同函数和过程的命名及格式。

3.5.3.2 属性访问方法

所有的属性访问方法必须出现在private 或 protected 中。属性访问方法的命名同函数和过程的命名另外读方法(reader method)必须使用前缀‘Get’. 写方法(writer method)必须使用前缀‘Set’。写方法的参数必须命名为‘Value’,其类型同所要写的属性相一致。例如:

TSomeClass = class(TObject)
private
FSomeField: Integer;
protected
function GetSomeField: Integer;
procedure SetSomeField( Value: Integer);
public
property SomeField: Integer read GetSomeField write SetSomeField;
end;

更多精彩尽在站长资源库电脑知识网 www.zzzyk.com

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,