飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2297|回复: 4

Delphi代码创建形式规范

[复制链接]
  • TA的每日心情
    开心
    2019-9-19 16:05
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2007-2-12 09:57:08 | 显示全部楼层 |阅读模式
    本规范的目的:给自己的代码一个统一而标准的外观,增强
                  可读性,可理解性,可维护性
    本规范的原则:名称反映含义,形式反映结构



    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 something 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, 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打头

    (完)
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2016-5-12 13:21
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2007-11-15 22:49:20 | 显示全部楼层
    可以啊!!!!!!!!!!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-11-15 22:50:50 | 显示全部楼层
    不错,楼主提供的格式看起来很专业:victory:
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-1-23 18:44:54 | 显示全部楼层
    映像最深的就是 if 。。。。then 。。。。后面没有分号 else 。。。

    这点跟C语言里面每条语句后面都要分号很不同。。 所以上面的 if语句好像多了分号
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-2-8 11:08:43 | 显示全部楼层
    好东西呀,,不错的东东,,喜欢DEPHI
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表