Delphi编码标准——一般的源代码格式规则

类别:Delphi 点击:0 评论:0 推荐:

    编码标准主要是为开发组提供一种编程时的准则,使项目开发人员在编程时有一致格式可遵循。这样,开发组中每个编程人员编写的代码能够被其他人理解,从而提高代码的可维护性,使得一套多人写的软件就像一人写的,使得代码更易理解。这要求大家使用一致的代码样式。

那么,之所以老生常谈介绍这些标准,是因为当新的开发人员加入项目开发组时,有的可能还不熟悉Delphi的编码标准。

       在这里将分以下几类来介绍这些标准:

1 一般的源代码格式规则

2过程和函数

3 文件、窗体与数据模块命名

4 包、组件命名

一般的源代码格式规则

缩进

缩进就是每级间有两个空格。不要在源代码中放置制表符。这是因为,制表符的宽度随着不同的设置和代码管理实用程序(打印、文档及版本控制等)而不同。

边距

边距设置为80个字符。源代码一般不会因写一个单词而超过边距,但本规则比较灵活。只要可能,长度超过一行的语句应当用逗号或运算符换行。换行后,应缩进两个字符。

括号

在左括号与下一字符之间没有空格。同样,右括号与前一字符也没有空格。

下面的例子演示了正确与不正确的空格。

CallProcedure( Parameters ); // 错!

CallProcedure (Parameters); // 正确!

保留字和关键字

Object Pascal语言的保留字和关键字总是完全的小写。

begin...end

begin语句必须单独占一行。

例如,下面第一行是错误的,而第二行正确:

for i:=0 to 10 do begin

Statement

end// 错, begin 与for在同一行

for i:=0 to 10 do //正确! begin 在另外一行中

begin

Statement

end

本规则的一个特殊情况是,当begin为else语句的一部分时。

例如:

if Condition then

begin

Statement

end

else begin

Statement;

end

end语句总单独一行。当begin不为else语句的一部分时,相应的end语句与begin语句的缩进量相同。

语句

(1) if_then_else语句

最有可能执行的情况应放在then子句中,不太可能的情况放在else子句中。

为了避免出现许多i f语句,可以使用case语句代替。

如果多于5级,不要使用i f语句。请改用更清楚的方法。

不要在i f语句中使用多余的括号。在源代码中,括号只有在确实需要时才使用。

例如:

if (I=42) then // 错,括号是多余的

if (I=42) or (J=42) then // 正确,必须使用括号

如果在i f语句中有多个条件要测试,应按照计算的复杂程度从右向左排。这样,可以使代码充分利用编译器的短路估算逻辑。如果Condition1比Condition2快,Condition2比Condition3快,则if语句应这样构造:if Conditior1 and Condition2 and Condition3 then

(2) case_else语句

case语句中每种情况的常量应当按数字或字母的顺序排列。

每种情况的动作语句应当简短且通常不超过4 ~ 5行代码。如果动作太复杂,应将代码单独放在一个过程或函数中。case语句的else子句只用于默认情况或错误检测。

(3) while 语句

建议不要使用exit过程来退出while循环。如果需要的话,应当使用循环条件退出循环。所有对w h i l e循环进行初始化的代码应当位于w h i l e入口前,且不要被无关的语句隔开。任何业务的辅助工作都应在循环后立即进行。

(4) for语句

如果循环次数是确定的,应当用for语句代替while语句。

(5) repeat语句

repeat语句类似于while循环,且遵循同样的规则。

(6) with语句

with语句应小心使用。要避免过度使用with语句,尤其是在with语句中使用多个对象或记录。

例如:

with Record1,Record2 do

这些情况很容易迷惑编程人员,且导致调试困难。

结构化异常处理

异常处理主要用于纠正错误和保护资源。这意味着,凡是分配资源的地方,都必须使用try... finally来保证资源得到释放。不过,如果是在单元的初始/结束部分或者对象的构造器/析构器中来分配/释放资源则例外。

(1) try... finally的用法

在可能的情况下,每个资源分配应当与try... finally结构匹配。

例如:

//下面代码可能导致错误

SomeClass1: = TSomeClass.Create;

SomeClass2: = TSomeClass.Create;

try

{do some code}

finally

SomeClass.Free;

SomeClass.Free;

e n d ;

//上述资源分配的一个安全方案是:

SomeClass1: = TSomeClass Create;

try

SomeClass2: = TSomeClass Create;

try

{do some code}

finally

SomeClass2.Free;

end;

finally

SomeClass1.Free;

end;

(2) try...except的用法

如果你希望在发生异常时执行一些任务,可以使用try...except。通常,没有必要为了简单地显示一个错误信息而使用try...except,因为Application对象能够自动根据上下文做到这一点。如果要在子句中激活默认的异常处理,可以再次触发异常。

(3) try... except...else的用法

不鼓励使用带else子句的try...except,因为这将阻塞所有的异常,包括你没有准备处理的异常。

本文地址:http://com.8s8s.com/it/it5414.htm