Delphi代码创建形式规范 1.0

本规范的目的:给自己的代码一个统一而标准的外观,增强

可读性,可理解性,可维护性

本规范的原则:名称反映含义,形式反映结构

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

Delphi代码创建形式规范 1.0的更多相关文章

  1. Python代码项目目录规范v1.0

    程序目录规范:bin # 存放可执行程序 xxxx.py # 程序主程序(入口文件)config # 存放配置信息 settings.py # 全局配置文件(可能暂时未应用)db # 存放数据文件 c ...

  2. Java线程创建形式 Thread构造详解 多线程中篇(五)

    Thread作为线程的抽象,Thread的实例用于描述线程,对线程的操纵,就是对Thread实例对象的管理与控制. 创建一个线程这个问题,也就转换为如何构造一个正确的Thread对象. 构造方法列表 ...

  3. rtmp规范1.0全面指南

    RTMP(real time messaging protocol)协议 本文为Adobe rtmp规范1.0的中文介绍,其中内容大部分都是翻译自rtmp官方文档rtmp_specification_ ...

  4. 拿什么拯救你,我的代码--c#编码规范实战篇

    此文为译文,原文地址请点击. 本文通过重构一个垃圾代码,阐述了如何写出优秀的代码.开发人员及代码审核人员需按照此规范开发和审核代码.此规范以C#为例,JAVA的童鞋一并参考,C++的童鞋自行脑补吧. ...

  5. 拿什么拯救你,我的代码--c#编码规范实战篇 (转)

    http://www.cnblogs.com/lazio10000/p/5413439.html 此文为译文,原文地址请点击. 本文通过重构一个垃圾代码,阐述了如何写出优秀的代码.开发人员及代码审核人 ...

  6. Delphi插件创建、调试与使用应用程序扩展

    Delphi插件创建.调试与使用应用程序扩展 翻译 : MiracleZ  有没有使用过Adobe Photoshop?如果用过,你就会对插件的概念比较熟悉.对外行人来说,插件仅仅是从外部提供给应用程 ...

  7. Mininet python代码创建拓扑、交互式界面创建主机、交换机

          python代码创建拓扑: from mininet.net importMininet net =Mininet() # Creating nodes in the network. c ...

  8. 一.OC基础之:1,OC语言的前世今生 ,2,OC语言入门,3,OC语言与C的差异,4,面向对象,5,类和对象的抽象关系,6,类的代码创建,7,类的成员组成及访问

    1,OC语言的前世今生 , 一, 在20世纪80年代早期,布莱德.麦克(Brad Cox)设计了OC语言,它在C语言的基础上增加了一层,这意味着对C进行了扩展,从而创造出一门新的程序设计语言,支持对象 ...

  9. 【Android】纯代码创建页面布局(含异步加载图片)

    开发环境:macOS 10.12 + Android Studio 2.2,MinSDK Android 5.1 先看看总体效果 本示例是基于Fragment进行的,直接上代码: [界面结构] 在 F ...

随机推荐

  1. webapi JWT 认证

    第一步 使用ng安装JWT组件 第二步 编写登录和生成token代码 byte[] key = Encoding.UTF8.GetBytes("123456789aaaaaaa") ...

  2. C# 简单的百度推送代码

    前段时间搞推送来着,安卓方面用到了百度的推送服务,由于只是简单的用到安卓推送的通知功能,所以没用百度推荐的C# SDK,通过借鉴网上的各种资料和百度的API,费了老大劲终于折腾出来一段能用的代码(早知 ...

  3. 关于springboot错误:“找不到或无法加载主类”的解决办法

    我从网上找的一个Demo,运行的时候报 错误:“找不到或无法加载主类”,百度了一番,都是说在项目目录打开cmd,使用 mvn install.mvn clean complie之类的命令,都成功了,但 ...

  4. IIS反向代理解决Web前端跨域

    1.1 IIS7反向代理解决跨域问题IIS的版本必须是IIS7及其以上,否则没有反向代理功能:按照以下步骤来配置IIS,以实现反向代理: 1.2 配置步骤1. 下载安装ARR(Application ...

  5. CSS3:CSS3 圆角

    ylbtech-CSS3:CSS3 圆角 1.返回顶部 1. CSS3 圆角 CSS3 圆角 使用 CSS3 border-radius 属性,你可以给任何元素制作 "圆角". C ...

  6. mysql开启操作日志(包含所有操作)

    配置 方法一:设置配置文件my.cnf(需重启) 添加以下参数 [mysqld] log_output=FILE # 日志打印到文件,默认配置,可以配置成table,日志就会记录到mysql库中的相应 ...

  7. c++-文件分离

    实现文件分离 1.头文件中不要使用using namespace,由于c++编译的特性,由于初学还没深入了解,不做具体编译的解释 2.由于没有了命名空间,所以string定义要写成std::strin ...

  8. centos 7 设置IP地址

    先说下安装方式:我是采用的最小化安装 虚拟机软件:vmware 设置IP有两种情况,动态IP和静态IP,下面分别说明两种IP地址的设置方法 1.动态IP 条件:路由设置了动态分配IP地址(一般默认是动 ...

  9. 【HDUOJ】1213 How many tables

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213 题意:Ignatius邀请了n个朋友来家里,朋友之间如果互相不认识的不想坐一起,所以至少要准备几 ...

  10. MySQL 不用 Null 的理由

    Null 貌似在哪里都是个头疼的问题,比如 Java 里让人头疼的 NullPointerException,为了避免猝不及防的空指针异常,千百年来程序猿们不得不在代码里小心翼翼的各种 if 判断,麻 ...