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

📄 delphi编码规范.htm

📁 Delphi编码规范,很好用的东西
💻 HTM
📖 第 1 页 / 共 4 页
字号:
  <TR>
    <TD>
      <P>if</P></TD>
    <TD>
      <P>implementation</P></TD>
    <TD>
      <P>in</P></TD>
    <TD>
      <P>inherited</P></TD></TR>
  <TR>
    <TD>
      <P>initialization</P></TD>
    <TD>
      <P>inline</P></TD>
    <TD>
      <P>interface</P></TD>
    <TD>
      <P>is</P></TD></TR>
  <TR>
    <TD>
      <P>label</P></TD>
    <TD>
      <P>library</P></TD>
    <TD>
      <P>mod</P></TD>
    <TD>
      <P>nil</P></TD></TR>
  <TR>
    <TD>
      <P>not</P></TD>
    <TD>
      <P>object</P></TD>
    <TD>
      <P>of</P></TD>
    <TD>
      <P>or</P></TD></TR>
  <TR>
    <TD>
      <P>out</P></TD>
    <TD>
      <P>packed</P></TD>
    <TD>
      <P>procedure</P></TD>
    <TD>
      <P>program</P></TD></TR>
  <TR>
    <TD>
      <P>property</P></TD>
    <TD>
      <P>raise</P></TD>
    <TD>
      <P>record</P></TD>
    <TD>
      <P>repeat</P></TD></TR>
  <TR>
    <TD>
      <P>resourcestring</P></TD>
    <TD>
      <P>set</P></TD>
    <TD>
      <P>shl</P></TD>
    <TD>
      <P>shr</P></TD></TR>
  <TR>
    <TD>
      <P>string</P></TD>
    <TD>
      <P>then</P></TD>
    <TD>
      <P>threadvar</P></TD>
    <TD>
      <P>to</P></TD></TR>
  <TR>
    <TD>
      <P>try</P></TD>
    <TD>
      <P>type</P></TD>
    <TD>
      <P>unit</P></TD>
    <TD>
      <P>until</P></TD></TR>
  <TR>
    <TD>
      <P>uses</P></TD>
    <TD>
      <P>var</P></TD>
    <TD>
      <P>while</P></TD>
    <TD>
      <P>with</P></TD></TR>
  <TR>
    <TD>
      <P>xor</P></TD>
    <TD>
      <P>private</P></TD>
    <TD>
      <P>protected</P></TD>
    <TD>
      <P>public</P></TD></TR>
  <TR>
    <TD>published</TD>
    <TD>automated</TD>
    <TD> </TD>
    <TD> </TD></TR></TBODY></TABLE>
<H3> </H3>
<H3>3). 过程和函数</H3>
<H4>(1). 格式</H4>
<P>&nbsp; 过程名应当以大写字母开始,且大小写交错以增加可读性。下面是一个不正确的写法:</P>
<BLOCKQUOTE>
  <P><B>procedure</B> thisisapoorlyformattedroutinename;</P></BLOCKQUOTE>
<P>改成这样写就对了:</P>
<BLOCKQUOTE>
  <P><B>procedure</B> ThisIsMuchMoreReadableRoutineName;</P></BLOCKQUOTE>
<H4>(2). 形参</H4>
<H5>(1) 格式</H5>
<P>&nbsp; 只要可能,同一类型的形参应当归并在一起:</P>
<BLOCKQUOTE>
  <P><B>procedure</B> 
Foo(Param1,Param2,Param3:Imteger;Param4:string);</P></BLOCKQUOTE>
<H5>(2) 参数顺序</H5>
<P>&nbsp; 
形参的顺序主要要考虑寄存器调用规则。最常用的参数应当作为第一个参数,按使用频率依次从左到右排。输入参数位于输出参数之前。范围大的参数应当放在范围小的参数之前。例如:</P>
<BLOCKQUOTE>
  <P>SomeProc(aPlanet, aContinent, aCountry, aState, aCity).</P></BLOCKQUOTE>
<P>&nbsp; 有些则例外。例如,在事件处理过程中,TObject 类型的Sender 参数往往是第一个要传递的参数。</P>
<H5>(3) 常量参数</H5>
<P>&nbsp; 要使记录、数组、短字符串或接口类型的参数不能被过程修改,就应当把形参标以<B>Const</B> 
。这样,编译器将以最有效的方式生成代码,保证传递的参数不可变。</P>
<P>&nbsp; 如果其他类型的参数希望不被过程所修改,也可以标上<B>Const</B> 
。尽管这对效率没有影响,但这给过程的调用者带来了更多的信息。</P>
<H3>4). 变量</H3>
<H4>(1). 局部变量</H4>
<P>&nbsp; 局部变量用于过程内部,果需要的话,应当在过程的入口处立即初始化变量。局部的AnsiString 
类型的变量自动被初始化为空字符串,局部的接口和dispinterface类型的变量自动被初始化为nil,局部的Variant和OleVariant类型的变量自动被初始化为Unassigned。</P>
<H4>(2). 全局变量</H4>
<P>&nbsp; 
一般不鼓励使用全局变量。不过,有时候需要用到。即使如此,也应当把全局变量限制在需要的环境中。例如,一个全局变量可能只在单元的实现部分是全局的。</P>
<P>&nbsp; 
全局数据如果将由许多单元使用,就应移动到一个公用单元里被所有对象使用。全局数据可在声明时直接初始化为一个值。注意,所有全局变量自动进行零初始化,因此,不要将全局变量初始化为诸如0 
、nil、或Unassigned等空值。零初始化的全局变量在.EXE文件中不占空间。零初始化的数据保存在虚拟的数据段中,而虚拟数据段只在应用程序启动时才分配内存。非零初始化的全局数据则在.EXE文件中占空间。</P>
<H3><B>5). 类型</B></H3>
<H4>(1). 大小写规则</H4>
<P>&nbsp; 类型标识符是保留字,应当全部小写。Win32 API 
类型常常全部大写,并且遵循诸如Windows.pas或其他API单元中关于特定类型名的规则。对于其他变量名,第一个字母应大写,其他字母则大小写交错。下面是一些例子:</P>
<BLOCKQUOTE>
  <P><B>var</B><BR>&nbsp; MyString: <B>string</B>; <I><FONT color=#0000ff>// 
  保留字</FONT><BR></I>&nbsp; WindowsHandle: HWND; <I><FONT color=#0000ff>// Win32 
  API 类型</FONT><BR></I>&nbsp; I: Integer; <I><FONT 
  color=#0000ff>//在System单元中引入的类型标识</FONT></I></P></BLOCKQUOTE>
<H4>(2). 浮点型</H4>
<P>&nbsp; 
不鼓励使用Real类型,因为它只是为了与老的Pascal代码兼容而保留的。通常情况下,对于浮点数应当使用Double。Double可被处理器优化,是IEEE定义的标准的数据格式。当需要比Double提供的范围更大时,可以使用Extend。Extend是intel专用的类型,Java不支持。当浮点变量的物理字节数很重要时(可能使用其他语言编写DLL),则应当使用Single。</P>
<H4>(3).Variant和OleVariant</H4>
<P>&nbsp; 
一般不建议使用Variant和OleVariant。但是,当数据类型只有在运行期才知道时(常常是在COM和数据库应用的程序中),这两个类型对编程就有必要。当进行诸如自动化ActiveX控件的COM编程时,应当使用OleVariant;而对于非COM编程,则应当使用Variant。这是因为,Variant能够有效地保存Delphi的原生字符串,而OleVariant则将所有字符串转换为OLE字符串(即WideChar字符串),且没有引用计数功能。</P>
<H3>6). 语句</H3>
<H4>(1). <B>If</B> 语句</H4>
<P>&nbsp; 
在<B>if</B>/<B>then</B>/<B>else</B>语句中,最有可能执行的情况应放在<B>then</B>子句中,不太可能的情况放在else子句中。为了避免出现许多<B>if</B>语句,可以使用<B>case</B>语句代替。如果多于5级,不要使用if语句。请改用更清楚的方法。不要在<B>if</B>语句中使用多余的括号。</P>
<P>&nbsp; 
如果在<B>if</B>语句中有多个条件要测试,应按照计算的复杂程度从右向左排。这样,可以使代码充分利用编译器的短路估算逻辑。例如,如果Condition1比Condition2快,Condition2比Condition3快,则<B>if</B>语句一般应这样构造:</P>
<BLOCKQUOTE>
  <P><B>if</B> Condition1 <B>and</B> Condition2 <B>and</B> Condition3 
  <B>then</B></P></BLOCKQUOTE>
<P>&nbsp; 如果Condition3为False的机会很大,利用短路估算逻辑,我们也可以将Condition3放在最前面:</P>
<BLOCKQUOTE>
  <P><B>if</B> Condition3 <B>and</B> Condition1 <B>and</B> Condition2 
  <B>then</B></P></BLOCKQUOTE>
<H4>(2). <B>case</B> 语句</H4>
<H5>(1) 概述</H5>
<P><B>&nbsp; case</B>语句中每种情况的常量应当按数字或字母的顺序排列。每种情况的动作语句应当简短且通常不超过4 - 5 
行代码。如果动作太复杂,应将代码单独放在一个过程或函数中。<B>Case</B>语句的<B>else</B>子句只用于默认情况或错误检测。</P>
<H5>(2) 格式</H5>
<P><B>&nbsp; case</B>语句遵循一般的缩进和命名规则。</P>
<H4>(3). <B>while</B> 语句</H4>
<P>&nbsp; 
建议不要使用Exit过程来退出<B>while</B>循环。如果需要的话,应当使用循环条件退出循环。所有对while循环进行初始化的代码应当位于while入口前,且不要被无关的语句隔开。任何业务的辅助工作都应在循环后立即进行。</P>
<H4>(4). <B>for</B> 语句</H4>
<P>&nbsp; 如果循环次数是确定的,应当用<B>for</B>语句代替<B>while</B>语句。</P>
<H4>(5). <B>repeat</B> 语句</H4>
<P><B>&nbsp; repeat</B>语句类似于<B>while</B>循环,且遵循同样的规则。</P>
<H4>(6). <B>with</B> 语句</H4>
<H5>(1) 概述</H5>
<P><B>&nbsp; with</B>语句应小心使用。要避免过度使用with语句,尤其是在with语句中使用多个对象或记录。例如:</P>
<BLOCKQUOTE>
  <P><B>with</B> Record1,Record2 <B>do</B></P></BLOCKQUOTE>
<P>&nbsp; 这些情况很容易迷惑编程人员,且导致调试困难。</P>
<H5>(2) 格式</H5>
<P><B>&nbsp; with</B>语句也遵循本章关于命名和缩进的规则。</P>
<H3><B>7). 结构化异常处理</B></H3>
<H4>(1). 概述</H4>
<P>&nbsp; 
异常处理主要用于纠正错误和保护资源。这意味着,凡是分配资源的地方,都必须使用<B>try</B>...<B>finally</B>来保证资源得到释放。不过,如果是在单元的初始/结束部分或者对象的构造器/析构器中来分配/释放资源则例外。</P>
<H4>(2). <B>try</B>...<B>finally</B>的用法</H4>
<P>&nbsp; 在可能的情况下,每个资源分配应当与<B>try</B>...<B>finally</B>结构匹配,例如,下面代码可能导致错误:</P>
<BLOCKQUOTE>
  <P>SomeClass1 := TSomeClass.Create;<BR>SomeClass2 := 
  TSomeClass.Create;<BR><B>try</B><BR>&nbsp; <I><FONT color=#0000ff>{ do some 
  code }</FONT></I><BR><B>finally</B><BR>&nbsp; SomeClass1.Free;<BR>&nbsp; 
  SomeClass2.Free;<BR><B>end</B>;</P></BLOCKQUOTE>
<P>&nbsp; 上述资源分配的一个安全方案是:</P>
<BLOCKQUOTE>
  <P>SomeClass1 := TSomeClass.Create;<BR><B>try</B><BR>&nbsp; SomeClass2 := 
  TSomeClass.Create;<BR>&nbsp; <B>try</B><BR>&nbsp;&nbsp;&nbsp; <I><FONT 
  color=#0000ff>{ do some code }</FONT></I><BR>&nbsp; 
  <B>finally</B><BR>&nbsp;&nbsp;&nbsp; SomeClass2.Free;<BR>&nbsp; 
  <B>end</B>;<B><BR>finally</B><BR>&nbsp; 
SomeClass1.Free;<BR><B>end</B>;</P></BLOCKQUOTE>
<H4>(3). <B>try</B>...<B>except</B>的用法</H4>
<P>&nbsp; 
如果你希望在发生异常时执行一些任务,可以使用<B>try</B>...<B>except</B>。通常,没有必要为了简单地显示一个错误信息而使用<B>try</B>...<B>except</B>,因为Application对象能够自动根据上下文做到这一点。如果要在子句中激活默认的异常处理,可以再次触发异常。</P>

⌨️ 快捷键说明

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