代码创建形式规范 1.0 (for delphi)

原创 2004年07月27日 21:57:00

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

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

前端代码规范1.0

前段时间在看一些规范性的东西记在了笔记上,今天在这里拿出来给大家分享一下,目前我采用(学习到)的一些规范约束 【后面会持续更新。。。。】1.文件/资源命名1.1 资源名全部小写1.2 - 分割名称 ....
  • sinat_22043763
  • sinat_22043763
  • 2017年03月03日 00:18
  • 121

Delphi编程代码规范

1. 一般的源代码格式规则 2 1.1 缩进 2 1.2 空格 2 1.3 边距 2 1.4 颜色及文字属性 2 1.5 begin···end 2 2. OBJECT PASCAL 3 2.1 括号...
  • wozengcong
  • wozengcong
  • 2013年09月09日 12:59
  • 789

安卓代码规范1.0

1.编码规范   2.常见开发习惯   1.编码规范 1.1 命名   1.1.1 通用规则   使用骆驼命名法尽量使用完整的英文描述   尽量使用术语,约定俗成的名词,比如 i...
  • j499832434
  • j499832434
  • 2017年06月24日 11:51
  • 49

百度代码规范 -- PHP

php编码规范 php标准委员会(php-styleguide@baidu.com): 许立强(TB-TD, 主席)贾春鑫(PS)廖慧琴(LBS RD)仇昊(VS)全伟(CS) 王岩(KS)...
  • sinat_34990639
  • sinat_34990639
  • 2017年03月16日 15:13
  • 934

Delphi前缀命名规范

Standard页 mm        TMainMenu pm        TPopupMenu mmi       TMainMenuItem pmi       TPopupMenuItem ...
  • wozengcong
  • wozengcong
  • 2013年12月23日 22:56
  • 1047

了解HTTP协议栈(实践篇)

关于http协议的理论知识,我在这里就不详细说明了,具体下面给出的链接有。接下来都是用具体的操作显示的,各位可以结合起来看。   一、使用nc打开端口,并使用浏览器进行访问 (对应文章中的HTTP协...
  • nanruitao10
  • nanruitao10
  • 2016年03月28日 20:38
  • 209

高效代码审查的八条准则和十个经验

代码审查(Code Review)是软件开发中常用的手段,和QA测试相比,它更容易发现和架构以及时序相关等较难发现的问题,还可以帮助团队成员提高编程技能,统一编程风格等。   1. 代码审查要求团队...
  • hpb21
  • hpb21
  • 2013年10月09日 11:25
  • 2370

如何在程序中执行动态生成的Delphi代码

如何在程序中执行动态生成的Delphi代码  经常发现有人提这类问题,或者提问内容最后归结成这种问题  前些阵子有位高手写了一个“执行动态生成的代码”,这是真正的高手,我没那种功力,我只会投机...
  • wc1000
  • wc1000
  • 2015年07月18日 16:04
  • 1040

java.io.File的路径获取方式分析

首先介绍下我们今天的三个主角: getPath getAbsolutePath getCanonicalPath 先上代码: package test; import ...
  • jiaotuwoaini
  • jiaotuwoaini
  • 2016年05月16日 23:49
  • 2520

Delphi 窗体的创建 和 释放

Delphi窗体创建释放过程及单元文件小结      Delphi中的窗体,有模式窗体与非模式窗体两种。       两种窗体的调用方式不同,模式窗体使用ShowModal显示,非模式窗体使用Sh...
  • lailai186
  • lailai186
  • 2013年06月04日 14:39
  • 2690
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:代码创建形式规范 1.0 (for delphi)
举报原因:
原因补充:

(最多只允许输入30个字)