代码创建形式规范

Delphi代码创建形式规范 1.0
Bear, 2000-5-1
本规范的目的:给自己的代码一个统一而标准的外观,增强
              可读性,可理解性,可维护性
本规范的原则:名称反映含义,形式反映结构
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[0..5, 0..2] 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[gv87a..gv89a] 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[0..2] of char;
  PInterfaceTable = ^TInterfaceTable;
  TInterfaceTable = packed record
  EntryCount: Integer;
  Entries: array[0..9999] 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
           else begin
                       -------------;
                       -------------;
                       -------------;
                    end;
  end;
11、with 语句
   with -------- do
      -------------;
   with -------- do
   begin
      -------------;
      -------------;
      -------------;
   end;
12、try 语句
     try
       -------------;
       -------------;
       -------------;
     finally
       -------------;
       -------------;
       -------------;
     end;
     try
       try
         -------------;
         -------------;
         -------------;
       except
          -------------;
           -------------;
       end;
     finally
       -------------;
       -------------;
       -------------;
     end;
13、其它
     运算:运算符前后要有空格
     w1[n] := ((i + 1) * v0[n] + j * v1[n] + (k - 1) * v2[n]) / 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 someth
ing after Create}
       destructor Destroy; override; {if need to do something before Destroy
}
       function --------------: -------;
       procedure --------------;
       property -------: ------- read F-------;
     published
     end;
14、形式反映结构
  例子:
  TetIndex : array[0..3] of TInteger3v =
             ( (0, 1, 3),
                (2, 1, 0),
                (3, 2, 0),
                (1, 2, 3) );
  Cursors: array[0..4] 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[a, 0]);
  glVertex3fv(@dodec[b, 0]);
  glVertex3fv(@dodec[c, 0]);
  glVertex3fv(@dodec[d, 0]);
  glVertex3fv(@dodec[e, 0]);
  glEnd();
  dodec[0, 0] := -alpha; dodec[0, 1] := 0; dodec[0, 2] := beta;
  dodec[1, 0] := alpha; dodec[1, 1] := 0; dodec[1, 2] := beta;
  dodec[2, 0] := -1; dodec[2, 1] := -1; dodec[2, 2] := -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, ColorLook
up);
        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打头


--End--

posted on 2006-09-11 10:08 青蛙學堂 阅读(300) 评论(0)  编辑 收藏 引用 所属分类: 軟件布袋

只有注册用户登录后才能发表评论。
<2006年9月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(8)

随笔分类

随笔档案

收藏夹

青蛙学堂

最新评论

阅读排行榜

评论排行榜