Moodsky 发表于 2007-2-12 09:57:08

Delphi代码创建形式规范

本规范的目的:给自己的代码一个统一而标准的外观,增强
            可读性,可理解性,可维护性
本规范的原则:名称反映含义,形式反映结构



1、单元风格
2、各区风格
3、语句风格
4、命名规则

参考:Borland官方Object Pascal风格指南
      Delphi5程序员指南编码标准
   

1、单元风格
 

{*******************************************************}
{                                                       }
{                     项目名称                        }
{                                                       }
{            版权所有 (C) 2000,2001 公司名称            }
{                                                       }
{*******************************************************}


unit UnitName;
{*******************************************************
项目:
模块:
描述:
版本:
日期:
作者:
更新:
TODO:
*******************************************************}

interface

uses
   ----,----,----,----,----,----,----,----,----,----,----,
   ----,----, ----,----,----,----;

const
   --------------------;
   --------------------;
   --------------------;

type
   --------------------;
   --------------------;
   --------------------;
    --------------------;
   --------------------;
   --------------------;

var
   --------------------;
   --------------------;
   --------------------;

implementation

uses
   ----,----,----,----;

{$R *.RES}
{$R *.DFM}

--------------------------------;
--------------------------------;
--------------------------------;
--------------------------------;
--------------------------------;
--------------------------------;
--------------------------------;
--------------------------------;
--------------------------------;
--------------------------------;
--------------------------------;
--------------------------------;

end.

返回



2、各区风格
0、注释与空白
   用{ } 不用 //
   主题注释,函数过程目的说明,语句注释
   空行 :版权块,类之间,方法之间--(两行) 方法内部块(一行)
   空格 :用以增强清晰度                        
   缩进 :两个空格

1、常量区
基本:

Const
-----    = ----;
-----    = ----;
-----    = ----;
-----    = ----;

扩展
前缀:少则C_---;多则可以每个主题有一个前缀
Const

{ 主题1 }
C_---    = ----;{ 含义 }
C_---    = ----;{ 含义 }
C_---    = ----;{ 含义 }
C_---    = ----;{ 含义 }
{ 主题2 }
-----    = ----;
-----    = ----;
-----    = ----;
-----    = ----;

资源字符串,放在变量区后面

resourcestring

const
S_---    = '----';
S_---    = '----';
S_---    = '----';

例子:

   CM_BASE               = $B000;
   CM_ACTIVATE             = CM_BASE + 0;
   CM_DEACTIVATE         = CM_BASE + 1;
   CM_GOTFOCUS             = CM_BASE + 2;
   CM_LOSTFOCUS            = CM_BASE + 3;
    NumPaletteEntries = 20;
    BoxPoints : array of GLfloat =
            ((-1,0,0),
                  ( 0,1,0),
                  ( 1,0,0),
                  ( 0, -1,0),
                  ( 0,0,1),
                  ( 0,0, -1));

   { Variant type codes (wtypes.h) }

    varEmpty       = $0000; { vt_empty   }
    varNull      = $0001; { vt_null      }
    varSmallint    = $0002; { vt_i2          }
   GIFVersions : array of TGIFVersionRec = ('87a', '89a');



2、类型区
   数据类型-->不提供服务的数据类型
   T---- = ---------
   对象类型-->有状态并提供服务的实体
   T---- = class(----)
   private
   --------
   --------
   protected
   --------
   --------
   public
       --------
       --------
   published
       --------
      --------
   end;



   按字母排序

Private
   1、所有数据放在Private 区,以F打头
   2、所有事件属性对应的方法指针放在Private 区,以F打头
   3、属性的Get与Set方法放在Private 区-->不准备被继承
   4、响应消息的方法放在Private 区
protected
   1、被子类调用的但不能被外界调用的方法与属性
   2、供子类重载的方法 virsual;      virsual;abstract
public
   1、构建析构方法
   2、供外界调用的方法
   3、供外界调用的属性
published
   1、出现在Object Inspector里供设计时用的属性
   2、出现在Object Inspector里供设计时用的事件响应

例子:

TGIFVersion = (gvUnknown, gv87a, gv89a);
TGIFVersionRec = array of char;
PInterfaceTable = ^TInterfaceTable;
TInterfaceTable = packed record
EntryCount: Integer;
Entries: array of TInterfaceEntry;

{ forword declairation }
TGIFImage = class;
TGIFSubImage = class;
{---------------------------
         TGIFItem
   ---------------------------}
TGIFItem = class(TPersistent)
private
    FGIFImage: TGIFImage;
.............
end;

3、变量区
定义全局变量
注意不要有缺省的类对象变量,在调用者中声明!
var
-----------: -------;
-----------: -------;
例子:
GIFDelayExp: integer = 10;          { Delay multiplier in mS.}
GIFDelayExp: integer = 12;

4、实现区
{---------------------------------------------------------
                        主题
----------------------------------------------------------}

{ 方法的目的 }
procedure----------------------------
begin
--------;
--------;
end;

{ 方法的目的 }
function-----------------------------
begin
--------;
--------;
end;


5、过程与函数
   命名
   格式

返回

3、语句风格
1、简单语句
   -------;
2、复合语句
   begin
   -----;
   -----;
   end;

3、赋值语句
   -- := -------;
   -- := (-- + --)* (-- / --);

4、局部变量
var
---: ---;
---: ---;
对于逻辑上并列的变量组:
var
---,
---,
---: ---;

5、数组声明
--- = array [*..*] of ---;

6、if 语句
if (--------) then
    -------------;


if (--------) then
begin
    -------------;
    -------------;
    -------------;
end;

if (--------) then
    -------------;
else
    -------------;

if (--------) then
begin
    -------------;
    -------------;
    -------------;
end else
    -------------;

   if (--------) then
begin
    -------------;
    -------------;
    -------------;
end else
begin
    -------------;
    -------------;
    -------------;
end;

if (--------) then
    -------------
else if (--------) then
    -------------;

7、for 循环

   for I := -------- to -------- do
   -------------;


   for I := -------- to -------- do
begin
      -------------;
      -------------;
   -------------;
   end;

   for I := -------- to -------- do
      if (--------) then
      begin
         -------------;
         -------------;
         -------------;
       end;

   for I := -------- to -------- do
   with -------- then
   begin
      -------------;
       -------------;
       -------------;
   end;

8、while 循环

while ------ do
begin
    -------------;
    -------------;
    -------------;
end;

9、repeat 循环
repeat
    -------------;
    -------------;
    -------------;
until ------;

10、case 语句

   case -------- of
   -------- :   -------------;
   -------- :   -------------;
   -------- :   -------------;
         else    -------------;
   end;

   case -------- of
      -------- :
      -----------------------------------------------------------------;
      -------- :
      -----------------------------------------------------------------;
      -------- :
      -----------------------------------------------------------------;
         else
      -----------------------------------------------------------------;
    end;

case -------- of
   -------- : begin
                        --------------------------;
                        --------------------------;
                        --------------------------;
                  end;
   -------- : begin
                        --------------------------;
                        --------------------------;
                        --------------------------;
                     end;
   -------- : begin
                     --------------------------;
                     --------------------------;
                     --------------------------;
                  end
         elsebegin
                     -------------;
                     -------------;
                     -------------;
                  end;

end;

11、with 语句
   with -------- do
      -------------;

   with -------- do
   begin
      -------------;
      -------------;
      -------------;
   end;

12、try 语句
   try
       -------------;
       -------------;
       -------------;
   finally
       -------------;
       -------------;
       -------------;
   end;

   try
       try
         -------------;
         -------------;
         -------------;
       except
          -------------;
         -------------;
       end;
   finally
       -------------;
       -------------;
       -------------;
   end;

13、其它
   运算:运算符前后要有空格
   w1 := ((i + 1) * v0 + j * v1 + (k - 1) * v2) / depth;

   -- = --
   -- >= --
   -- <= --
   -- > --
   -- < --
   -- <> --
   -- := --;   赋值
   --: ----;   类型

   同一类型且含义逻辑上不并列的变量20个字符长的变量名
   private
       -------               : -------;
       -------               : -------;
       -------               : -------;
       -------               : -------;
       -------               : -------;
   var
       -------               : -------;
       -------               : -------;
       -------               : -------;
       -------               : -------;
       -------               : -------;
   function ---------------------(--: ----; --: ----; --: ----): ----;

   同一类型且含义逻辑上并列的变量 如 Error0,Error1,Error2 ; R,G,B
   private
       -------            ,
       -------            ,
       -------            ,
       -------            ,
       -------            : -------
   var
       -------            ,
       -------            ,
       -------            ,
       -------            ,
       -------            : -------
   function---------------------(--, --, --: ----; var --, --, --: ----): ----;

   T------- = class(-------)
   private
       F-------: -------;
       F-------: -------;
       F-------: -------;
       function --------------: -------;
       procedure --------------;
   protected
       function --------------: -------;
       procedure --------------;
       function --------------: -------; virtual; abstract;
   public
       constructor Create(-------: -------); override;   {if need to do something after Create}
       destructor Destroy; override;                     {if need to do something before Destroy}
       function --------------: -------;
       procedure --------------;
       property -------: ------- read F-------;
   published

   end;

14、形式反映结构
例子:
TetIndex : array of TInteger3v =
             ((0, 1, 3),
                (2, 1, 0),
                (3, 2, 0),
                (1, 2, 3));
Cursors: array of TIdentMapEntry = (
    (Value: crDefault;      Name: 'crDefault'),
    (Value: crArrow;      Name: 'crArrow'),
    (Value: crCross;      Name: 'crCross'),
    (Value: crIBeam;      Name: 'crIBeam') );

if    (dwFlags and PFD_DRAW_TO_WINDOW) = 0)
      or(    (dwFlags and PFD_SUPPORT_OPENGL) = 0)
         or(   (dwFlags and PFD_DOUBLEBUFFER) = 0)
            or (iPixelType <> PFD_TYPE_RGBA)
            or (cColorBits < 16)
            )
         ) then
raise Exception.Create('Inappropriate Pixel Format chosen.');

glBegin(shadeType);
glNormal3fv(@n0);
glVertex3fv(@dodec);
glVertex3fv(@dodec);
glVertex3fv(@dodec);
glVertex3fv(@dodec);
glVertex3fv(@dodec);
glEnd();

dodec := -alpha;dodec := 0;       dodec := beta;
dodec := alpha;   dodec := 0;       dodec := beta;
dodec := -1;      dodec := -1;      dodec := -1;

procedure glutWireTorus(
                        innerRadius : GLdouble;//---------
                        outerRadius : GLdouble;//---------
                        nsides      : GLint;   //---------
                        rings       : GLint );   //---------
    case FRunDirection of
      rdRightToLeft : begin
                              StY:=CnY;
                                 StX:=Width - CurrentStep;
                              end;
      rdLeftToRight : begin
                                 StY:=CnY;
                                 StX:=-CurrentStep;
                              end;
      rdBottomToTop : begin
                                     StX:=CnX;
                                     StY:=Height - CurrentStep;
                                 end;
      rdTopToBottom : begin
                                     StX:=CnX;
                                     StY:=CurrentStep - RTHeight;
                                  end;
                           else begin
                                     StX:=CnX;
                                    StY:=CnY;
                                  end;
      end;

   case (DitherMode) of
      dmNearest:
          Ditherer := TDitherEngine.Create(Bitmap.Width, ColorLookup);
      dmFloydSteinberg:
          Ditherer := TFloydSteinbergDitherer.Create(Bitmap.Width, ColorLookup);
      dmStucki:
          Ditherer := TStuckiDitherer.Create(Bitmap.Width, ColorLookup);
      dmSierra:
          Ditherer := TSierraDitherer.Create(Bitmap.Width, ColorLookup);
      dmJaJuNI:
          Ditherer := TJaJuNIDitherer.Create(Bitmap.Width, ColorLookup);
      dmSteveArche:
          Ditherer := TSteveArcheDitherer.Create(Bitmap.Width, ColorLookup);
      dmBurkes:
          Ditherer := TBurkesDitherer.Create(Bitmap.Width, ColorLookup);
      else
      exit;
end;

4、命名规则
1、文件名称:   u模块名称;见名知意
2、控件名称:   功能_控件缩写;见名知意
3、变量         :   尽量不用缩写,尽量用名词;见名知意
4、方法与过程:尽量不用缩写,尽量用动宾词组;见名知意
5、常见的惯例
            类名以T打头 (Type之意)
            类的私有数据域以F打头(Field之意)
            对数据的存取操作分别以Set,Get打头
            事件属性以On打头

(完)

joyyazi 发表于 2007-11-15 22:49:20

可以啊!!!!!!!!!!

1987 发表于 2007-11-15 22:50:50

不错,楼主提供的格式看起来很专业:victory:

crackiss 发表于 2009-1-23 18:44:54

映像最深的就是 if 。。。。then 。。。。后面没有分号 else 。。。

这点跟C语言里面每条语句后面都要分号很不同。。 所以上面的 if语句好像多了分号

cfanlane 发表于 2009-2-8 11:08:43

好东西呀,,不错的东东,,喜欢DEPHI
页: [1]
查看完整版本: Delphi代码创建形式规范