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. 笔记58 Spring+Hibernate整合(一)

    Spring+Hibernate整合 一.整合思路 使DAO继承HibernateTemplate这个类 HibernateTemplate这个类提供了setSessionFactory()方法用于注 ...

  2. 关于h5打包后 wag包无法安装的问题

    如果不是逻辑错误,那么有可能是下列三种情况之一, 1 wgt打包时的appid与安装包不符 2 打包wgt文件和打包安装包文件 用的不是同一个HBuilder账户 3 安装包打包时权限配置,和wgt包 ...

  3. 【JZOJ6421】匹配

    description analysis 对于普通树形\(DP\)可以设\(f[i][0/1],g[i][0/1]\)表示\([1,i]\)的线段树的最大值.方案数 \(0\)表示不选择根与某个儿子相 ...

  4. R语言 基本语法

    R语言基本语法 我们将开始学习R语言编程,首先编写一个"你好,世界! 的程序. 根据需要,您可以在R语言命令提示符处编程,也可以使用R语言脚本文件编写程序. 让我们逐个体验不同之处. 命令提 ...

  5. MaxCompute 表(Table)设计规范

    表的限制项 表(Table)设计规范 表设计主要目标 表设计的影响 表设计步骤 表数据存储规范 按数据分层规范数据生命周期 按数据的变更和历史规范数据的保存 数据导入通道与表设计 分区设计与逻辑存储的 ...

  6. delphi 可以自定义边框的文本框TSkinNormalEdit思路(QQ2011风格)

    需求: QQ我的资料中基本资料窗体中的文本框: 正常状态下,文本框只有一条看起来只有一个像素的边框,边框的颜色从上到下由深到浅的渐变,当鼠标定位到该文本框时,其边框会变粗,而且边框的颜色加亮显示 如下 ...

  7. spark在collect收集数据的时候出现outOfMemoryError:java heap space

    spark的collect是action算子,所有最后会以数组的形式返回给driver端,当数据太大的时候就会出现堆内存溢出.OutofMemoryError:java heap space. 在sp ...

  8. NX二次开发-UFUN添加工程图投影视图UF_DRAW_add_orthographic_view

    NX9+VS2012 #include <uf.h> #include <uf_draw.h> #include <uf_obj.h> #include <u ...

  9. [JZOJ 5813] 计算

    题意:求满足题意的方案数. 思路: 显然的计数类\(dp\). 不难发现,令$f(x) = \prod_{i=1}^{2m}{x_i} \(. 在找一个\)x'\(使得\)f(x') = \prod_ ...

  10. js Date.parse() format.

    date format android chrome linux chrome Mobile safari ios chrome windows safari linux firefox window ...