⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 delphi编码规范.htm

📁 Delphi编码规范,很好用的东西
💻 HTM
📖 第 1 页 / 共 4 页
字号:
<H4>(4). <B>try</B>...<B>except</B>...<B>else</B>的用法</H4>
<P>&nbsp; 
不鼓励使用带<B>else</B>子句的<B>try</B>...<B>except</B>,因为这将阻塞所有的异常,包括你没有准备处理的异常。</P>
<H1>3.<A name=命名规范>命名规范</A></H1>
<H2>3.1.<A name=过程(Procedure)与函数(Function)>过程(Procedure)与函数(Function)</A></H2>
<H3>1).命名</H3>
<P>&nbsp; 过程与函数名应当有意义。进行一个动作的过程最好在名称前加上表示动作的动词为前缀。例如:</P>
<BLOCKQUOTE>
  <P><B>procedure</B> FormatHardDrive;</P></BLOCKQUOTE>
<P>&nbsp; 设置输入参数值的过程名应当以Set 为其前缀,例如:</P>
<BLOCKQUOTE>
  <P><B>procedure</B> SetUserName;</P></BLOCKQUOTE>
<P>&nbsp; 获取数值的过程名应当以Get 为其前缀,例如:</P>
<BLOCKQUOTE>
  <P><B>function</B> GetUserName:string;</P></BLOCKQUOTE>
<H3>2).形参</H3>
<P>&nbsp; 所有形参的名称都应当表达出它的用途。如果合适的话,形参的名称最好以字母a 为前缀,例如:</P>
<BLOCKQUOTE>
  <P><B>procedure</B> SomeProc(aUserName:string; 
aUserAge:integer);</P></BLOCKQUOTE>
<P>&nbsp; 当参数名与类的特性或字段同名时,前缀a 就有必要了。</P>
<H3>3).命名冲突</H3>
<P>&nbsp; 当两个单元中含有相同名称的过程时,如果调用该过程,实际被调用的是Uses 
子句中较后出现的那个单元中的过程。为避免这种情况,可在方法名前加想要的单元名,例如:</P>
<BLOCKQUOTE>
  <P>SysUtils.FindClose(SR);</P>
  <P>或Windows.FindClose(Handle);</P></BLOCKQUOTE>
<H2>3.2.<A name=变量(Variable)>变量(Variable)</A></H2>
<P>&nbsp; 变量的名称应当能够表达出它的用途。循环控制变量常常为单个字母,诸如I 、J 或K 
。也可以使用更有意义的名称,例如UserIndex。布尔变量名必须能清楚表示出True 和False 值的意义。</P>
<H3>1). 局部变量</H3>
<P>&nbsp; 局部变量遵循其他变量的命名规则。</P>
<H3>2). 全局变量</H3>
<P>&nbsp; 全局变量以大写字母“G”打头,并遵循其他变量的命名规则。</P>
<H2>3.3.<A name=类型(Type)>类型(Type)</A></H2>
<H3>3.3.1.<A name=一般类型>一般类型</A></H3>
<H4>1). 枚举型</H4>
<P>&nbsp; 枚举类型名必须代表枚举的用途。名称前要加T字符作为前缀,表示这是个数据类型。枚举类型的标识符列表的前缀应包含2 - 3 
个小写字符,来彼此关联。例如:</P>
<BLOCKQUOTE>
  <P>TSongType=(stRock, stClassical, stCountry, stAlternative, stHeavyMetal, 
  stRB);</P></BLOCKQUOTE>
<P>&nbsp; 枚举类型的变量实例的名称与类型相同,但没有前缀T 
,也可以给变量一个更加特殊名称,诸如:FavoriteSongTypel、FavoriteSongType2等等。</P>
<H3>3.3.2.<A name=构造类型>构造类型</A></H3>
<H4>1). 数组类型</H4>
<P>&nbsp; 数组类型名应表达出该数组的用途。类型名必须加字母“T”为前缀。如果要声明一个指向数组类型的指针,则必须加字母P 
为前缀,且声明在类型声明之前。例如:</P>
<BLOCKQUOTE>
  <P><B>type</B><BR>&nbsp; PCycleArray = ^TCycleArray;<BR>&nbsp; 
  TCycleArray=<B>array</B>[1..100] <B>of</B> integer;</P></BLOCKQUOTE>
<P>实际上,数组类型的变量实例与类型名称相同,但没有“T”前缀。</P>
<H4>2). 记录类型</H4>
<P>&nbsp; 
记录类型名应表达出记录的用途。类型名必须加字母T为前缀。如果要声明一个指向记录类型的指计,则必须加字母P为前缀,且其声明在类型声明之前。例如:</P>
<BLOCKQUOTE>
  <P><B>type</B><BR>&nbsp; PEmployee = ^TEmployee;<BR>&nbsp; TEmployee = 
  <B>record</B><BR>&nbsp;&nbsp;&nbsp; EmployeeName: 
  <B>string</B>;<BR>&nbsp;&nbsp;&nbsp; EmployeeRate: Double;<BR>&nbsp; 
  <B>end</B>;</P></BLOCKQUOTE>
<H3>3.3.3.<A name=类类型(Class)>类类型(Class)</A></H3>
<H4>1). 命名与格式</H4>
<P>&nbsp; 
类的名称应当表达出类的用途。一般的类名前要加字母“T”,如果是接口类那么类名前要加“I”,错误异常类的类名前要加“E”,而类引用类型(Class-reference 
type)则要在类名后加“Class”。例如:</P>
<BLOCKQUOTE>
  <P><B>type</B><BR>&nbsp; TCustomer = <B>class</B>(TObject);<BR>&nbsp; 
  ICustomer = <B>interface</B>;<BR>&nbsp; TCustomerClass = <B>class of</B> 
  TCustomer<BR>&nbsp; ECustomerException = class(Exception);</P></BLOCKQUOTE>
<P>&nbsp; 类的实例名称通常与类名相同,只不过没有前缀“T”。</P>
<BLOCKQUOTE>
  <P><B>var</B><BR>&nbsp; Customer: TCustomer;</P></BLOCKQUOTE>
<P>注意:关于元件的命名,请参阅“<A 
href="http://dev.cq118.com/web/cn/research/softengine/dcs.htm#元件类型">元件类型</A>”。</P>
<H4>2).字段</H4>
<H5>(1) 命名与格式</H5>
<P>&nbsp; 字段的命名遵循与变量相同的规则,只不过要加前缀F ,表示这是字段。</P>
<H5>(2) 可见性</H5>
<P>&nbsp; 所有字段必须为私有。如果要在类的作用域之外访问字段,可借助于类的属性来实现。</P>
<H4>3).方法</H4>
<H5>(1) 命名与格式</H5>
<P>&nbsp; 方法的命名遵循与过程和函数相同的规则。</P>
<H5>(2) 静态方法</H5>
<P>&nbsp; 当你不希望一个方法被派生类覆盖时,应当使用静态方法。</P>
<H5>(3) 虚拟方法(<B>virtual</B>)与动态方法(<B>dynamic</B>)</H5>
<P>&nbsp; 
当你希望一个方法能被派生类覆盖,应当使用虚拟方法(<B>virtual</B>)。如果类的方法要被多个派生类直接或间接地使用,则应当用动态方法(<B>dynamic</B>)。例如,某一个类含有一个被频繁覆盖的方法,并有100个派生类,则应将方法定义为动态的,这样可以减少内存的开销。</P>
<H5>(4) 抽象方法(<B>abstract</B>)</H5>
<P>&nbsp; 如果一个类要创建实例,则不要使用抽象方法。抽象方法只能在那些从不创建实例的基类中使用。</P>
<H5>(5) 属性访问方法</H5>
<P>&nbsp; 
所有属性访问方法应当定义在类的私有或保护部分。属性访问方法遵循与过程和函数相同的规则。用于读的方法应当加“Get”前缀,用于写的方法应当加“Set”前缀,并且有一个叫Value的参数,其类型与属性的类型相同。例如:</P>
<BLOCKQUOTE>
  <P>TSomeClass = <B>class</B>(TObject)<BR><B>private</B><BR>FSomeField: 
  Integer;<BR><B>protected</B><BR><B>function</B> GetSomeField: 
  Integer;<BR><B>procedure</B> SetSomeField(Value: 
  Integer);<BR><B>public<BR>property </B>SomeField: Integer <B>read 
  </B>GetSomeField <B>write</B> SetSomeField;<BR><B>end</B>;</P></BLOCKQUOTE>
<P>&nbsp; 尽管不是必须,但还是建议你使用写访问方法来访问代表私有字段属性。</P>
<H4>4).属性</H4>
<P>&nbsp; 
属性作为私有字段的访问器,遵循与字段相同的命名规则,只不过没有F前缀。属性名应为名词,而不是动词。属性是数据,而方法是动作。数组属性名应当是复数,而一般的属性应当是单数。</P>
<H3>3.3.4.<A name=元件类型>元件类型</A></H3>
<H4>1). <A name=元件类型的命名标准>元件类型的命名标准</A></H4>
<P>&nbsp; 
元件的命名与类的命名类似,只不过当它与其它元件名称冲突时,你可以加上3个字符的前缀,用以标识公司、个人或其他实体。例如,一个时钟元件可以这样声明:</P>
<BLOCKQUOTE>
  <P>TddgClock = <B>class</B>(TComponent)</P></BLOCKQUOTE>
<P>注意,作为前缀的3 个字符要小写。</P>
<H4>2). <A name=元件实例的命名规则>元件实例的命名规则</A></H4>
<P>&nbsp; 
元件实例的名称应当能够描述其实际意义,这里命名规则使用了一个变更的匈牙利前缀命名规范。使用前缀而不使用后缀的原因是在搜寻时,在对象检查器和代码探索器中搜寻构件的名字比搜寻构件的类型更容易。在这个标准中,元件实例名包括两个部分:前缀和性质标识名。</P>
<H5>(1). 元件的前缀</H5>
<P>&nbsp; 元件的前缀多是表现元件类型的字母缩写。参见下面表中的元件前缀:</P>
<TABLE width=639 border=1>
  <TBODY>
  <TR>
    <TD width=458>元件类名</TD>
    <TD width=165>元件前缀</TD></TR>
  <TR>
    <TD width=458>TActionList, TAction表示动作的列表项</TD>
    <TD width=165>act</TD></TR>
  <TR>
    <TD width=458>TButton, TSpeedButton, TBitBtn等所有的按钮类</TD>
    <TD width=165>btn</TD></TR>
  <TR>
    <TD width=458>TCheckBox, TDBCheckBox等所有的检查框</TD>
    <TD width=165>chk</TD></TR>
  <TR>
    <TD width=458>TRadioButton单选按钮类</TD>
    <TD width=165>rdo</TD></TR>
  <TR>
    <TD width=458>TToolBar工具条</TD>
    <TD width=165>tb</TD></TR>
  <TR>
    <TD width=458>TMainMenu所有的主菜单类</TD>
    <TD width=165>mm</TD></TR>
  <TR>
    <TD width=458>TMainMenuItem所有的菜单项类</TD>
    <TD width=165>mi</TD></TR>
  <TR>
    <TD width=458>TPopupMenu所有的弹出式菜单类</TD>
    <TD width=165>pm</TD></TR>
  <TR>
    <TD width=458>TPopupMenuItem所有的弹出式菜单项类</TD>
    <TD width=165>pmi</TD></TR>
  <TR>
    <TD width=458>TLabel, TStaticText等所有用来显示的标签类</TD>
    <TD width=165>lbl</TD></TR>
  <TR>
    <TD width=458>TPanel等所有的面板类</TD>
    <TD width=165>pnl</TD></TR>
  <TR>
    <TD width=458>TPageControl等所有的页式控件类</TD>
    <TD width=165>pgc</TD></TR>
  <TR>
    <TD width=458>TEdit, TMaskEdit等所有的单行编辑框类</TD>
    <TD width=165>edt</TD></TR>
  <TR>
    <TD width=458>TMemo, TRichEdit等所有的多行编辑框类</TD>
    <TD width=165>mmo</TD></TR>
  <TR>
    <TD width=458>TDrawGrid, TStringGrid等所有的网格类</TD>
    <TD width=165>grd</TD></TR>
  <TR>
    <TD width=458>TAnimate等所有的动画类</TD>
    <TD width=165>ani</TD></TR>
  <TR>
    <TD width=458>TImageList等所有的图片列表类</TD>
    <TD width=165>il</TD></TR>
  <TR>
    <TD width=458>TImage等图片类</TD>
    <TD width=165>img</TD></TR>
  <TR>
    <TD width=458>TChart图表类</TD>
    <TD width=165>cht</TD></TR>
  <TR>
    <TD width=458>TComboBox, TDBComboBox等所有的下拉式列表框类</TD>
    <TD width=165>cbo</TD></TR>
  <TR>
    <TD width=458>TListBox, TDBList等所有的列表框类</TD>
    <TD width=165>lst</TD></TR>
  <TR>
    <TD width=458>TTreeView</TD>
    <TD width=165>tv</TD></TR>
  <TR>
    <TD width=458>TListView</TD>
    <TD width=165>lv</TD></TR>
  <TR>
    <TD width=458>THotKey</TD>
    <TD width=165>hk</TD></TR>
  <TR>
    <TD width=458>TSplitter等所有的分隔符类</TD>
    <TD width=165>spt</TD></TR>
  <TR>
    <TD width=458>TOpenDialog等所有的对话框元件类</TD>
    <TD width=165>dlg</TD></TR>
  <TR>
    <TD width=458>TTable等所有的数据表类</TD>
    <TD width=165>tbl</TD></TR>
  <TR>
    <TD width=458>TQuery等所有的SQL查询类元件</TD>
    <TD width=165>qry</TD></TR>
  <TR>
    <TD width=458>TClientDataSet所有的客户数据集元件</TD>
    <TD width=165>cds</TD></TR>
  <TR>
    <TD width=458>TDataSource</TD>
    <TD width=165>ds</TD></TR>
  <TR>
    <TD width=458>TDatabase</TD>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -